将NVARCHAR更改为VARCHAR列数据类型

时间:2014-08-28 09:50:31

标签: sql-server sql-server-2008 tsql

当尝试将列从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;

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

result:
ESONAP