2014-08-28 145 views
1

当试图从NVARCHAR(最大值)更改列VARCHAR(最大值)我收到提示:更改NVARCHAR到VARCHAR列数据类型

Cannot create a row of size 8063 which is greater than the allowable maximum row size of 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; 
+0

'nvarchar(max)'和'varchar(max)'可以存储在页外,所以它们只贡献一个指向行大小限制的指针。这里肯定还有别的事情发生,你可以发布表格定义吗? – Andomar 2014-08-28 09:55:12

+0

[SQL Server 2012中的最大行大小与varchar(max)字段]的可能重复(http://stackoverflow.com/questions/19251004/max-row-size-in-sql-server-2012-with-varcharmax-字段) – Tanner 2014-08-28 10:00:59

+0

或:http://stackoverflow.com/questions/3905934 – Tanner 2014-08-28 10:02:25

回答

0

尝试清空你的表先,然后做的修改,因为它似乎是一排商店现有的数据,超过了极限。拿出你的数据,做你的改变然后重新插入数据。

+0

一行如何将现有数据存储在极限之内? – Andomar 2014-08-28 09:56:52

+0

不幸的是,如果更改此类型,它将不会将数据移出行。这是非常罕见的情况,你不走运。 – 2014-08-28 09:58:38

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

result: 
ESONAP 
相关问题