将NVARCHAR列的数据类型更改为VARCHAR

5
尝试将NVARCHAR(max)列更改为VARCHAR(max)时,出现错误: “无法创建大小为8063的行,该大小大于允许的最大行大小8060。” 这是正确的,因为存储Unicode字符需要不同的空间。但是有没有办法强制SQL Server进行此转换? 编辑:表定义和更改命令:
CREATE TABLE [Descriptions](
    [SerialNo] [varchar](20) NOT NULL,
    [LanguageCode] [char](2) NOT NULL,
    [Note] [nvarchar](max) NOT NULL,
    [Address] [varchar](2000) NOT NULL,
    [StoreId] [varchar](3) NULL,
CONSTRAINT [UK_Descriptions] UNIQUE NONCLUSTERED 
(
    [SerialNo] ASC,
    [LanguageCode] ASC,
    [StoreId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,     ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

-- Alter column:
ALTER TABLE [Descriptions]  ALTER COLUMN [Note] varchar(max) NOT null;

nvarchar(max)varchar(max)都可以被存储在页外,因此它们只会对行大小限制做出指针贡献。这里一定还有其他问题,请您发布表定义吗? - Andomar
或:https://dev59.com/cW865IYBdhLWcg3wQMSW - Tanner
好奇怪。您试过G.Nader的建议了吗:创建一个具有所需定义的新表,将数据复制过去,删除旧表,并将新表重命名吗? - Andomar
@Andomar 我需要尝试一下,看看是否有更简单的解决方案。 - Dariusz
2个回答

3

尝试先清空您的表格,然后再进行更改,因为似乎一行存储了超过其限制的现有数据。把您的数据取出来,进行更改,然后重新插入数据。


一行存储如何存在超过其限制的数据? - Andomar
不幸的是,当您进行此类型的更改时,它不会将数据移出行。这是非常罕见的情况,您很不幸。 - G.Nader

1
DECLARE @H nvarchar(max) = N'ESŐNAP' -- rainy day in Hungarian
SELECT CONVERT(varchar(max),@H)

result:
ESONAP

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接