【发布时间】:2014-08-28 09:50:30
【问题描述】:
尝试将列从 NVARCHAR(max) 更改为 VARCHAR(max) 时出现错误:
无法创建大于允许的最大行大小 8060 的大小为 8063 的行。
这是正确的,因为存储 unicode 字符需要不同的存储空间。但是有什么方法可以强制 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;
【问题讨论】:
-
nvarchar(max)和varchar(max)都可以存储在页外,因此它们只提供一个指向行大小限制的指针。这里一定有其他事情发生,你能发布表定义吗? -
这很奇怪。您是否尝试过 G.Nader 的建议:创建一个具有所需定义的新表,复制您的数据,删除旧表,然后重命名新表?
-
@Andomar 如果没有更简单的解决方案,我将需要尝试
标签: sql-server sql-server-2008 tsql