Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将NVARCHAR更改为VARCHAR列数据类型_Sql Server_Sql Server 2008_Tsql - Fatal编程技术网

Sql server 将NVARCHAR更改为VARCHAR列数据类型

Sql server 将NVARCHAR更改为VARCHAR列数据类型,sql-server,sql-server-2008,tsql,Sql Server,Sql Server 2008,Tsql,尝试将列从NVARCHAR(max)更改为VARCHAR(max)时,出现错误: 无法创建大于允许的最大行大小8060的大小为8063的行 这是正确的,因为存储unicode字符需要不同的存储空间。但是有没有办法强迫SQLServer进行这种转换呢 编辑:表格定义和alter命令: CREATE TABLE [Descriptions]( [SerialNo] [varchar](20) NOT NULL, [LanguageCode] [char](2) NOT NULL,

尝试将列从NVARCHAR(max)更改为VARCHAR(max)时,出现错误:

无法创建大于允许的最大行大小8060的大小为8063的行

这是正确的,因为存储unicode字符需要不同的存储空间。但是有没有办法强迫SQLServer进行这种转换呢

编辑:表格定义和alter命令:

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)
存储在页外,因此它们只提供一个指向行大小限制的指针。这里肯定还有其他事情,你能发布一下表定义吗?可能与or重复:这很奇怪。您是否尝试过G.Nader的建议:创建一个具有所需定义的新表,复制您的数据,删除旧表,然后重命名新表?@Andomar如果没有更简单的解决方案,我需要尝试一次。行如何存储现有数据超过其限制?不幸的是,如果更改此类型,它不会将数据移出行。这是非常罕见的情况,你很不幸。
DECLARE @H nvarchar(max) = N'ESŐNAP' -- rainy day in Hungarian
SELECT CONVERT(varchar(max),@H)

result:
ESONAP