2014-08-28 4 views
1

При попытке изменить столбец из NVARCHAR (макс) до VARCHAR (макс) я получаю сообщение об ошибке:Изменить NVARCHAR колонок VARCHAR типа данных

Cannot create a row of size 8063 which is greater than the allowable maximum row size of 8060.

Это верно из-за различное хранение, необходимого для хранения символов Юникода , Но есть ли способ заставить SQL Server сделать это преобразование?

EDIT: определение таблиц и изменить команду:

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 (макс) и' VARCHAR (макс) 'могут храниться вне страницы, так что они лишь способствуют указатель на пределе размера строки. Там должно быть что-то еще, не могли бы вы разместить определение таблицы? – Andomar

+0

Возможный дубликат [Макс. Размер строки в SQL Server 2012 с полями varchar (max)] (http://stackoverflow.com/questions/19251004/max-row-size-in-sql-server.net-with-varcharmax- поля) – Tanner

+0

или: http://stackoverflow.com/questions/3905934 – Tanner

ответ

0

Попробуйте очистить таблицу первых затем сделать изменение, потому что кажется, что строка магазин, который существующие данные по его пределу. Извлеките данные, внесите изменения, а затем снова вставьте данные.

+0

Как строка может хранить существующие данные за ее пределы? – Andomar

+0

К сожалению, он не будет перемещать данные из строки при создании этого типа при изменении. Это очень редкая ситуация, вам не повезло. –

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

result: 
ESONAP 
Смежные вопросы