如何将列从nvarchar(max)更改为nvarchar(50)

时间:2016-07-25 12:54:39

标签: sql-server sql-server-2008

我在SQL SERVER 2008中有一个现有的表,其中一个列为NVARCHAR(MAX),并且其中只有少于10个字符的值。 该表正在生产中并且包含数据。

我有一个要求,我必须将此列从NVARCHAR(MAX)更改为NVARCHAR(50)。 T 他执行此操作时SQL Server会出现一些Truncation错误,即使该列中的数据少于10个字符。

这是我的剧本:

ALTER TABLE [dbo].[Table] ALTER COLUMN [Column1] NVARCHAR ( 50 ) NOT NULL 

2 个答案:

答案 0 :(得分:3)

首先使用此查询检查您的表数据:

SELECT DATALENGTH(Column_Name) AS FIELDSIZE, Column_Name 
FROM Table_Name 

如果一切正常,您可能已经检查了Prevent Saving Changes选项。请按照以下步骤检查:

工具> 设计师取消选中阻止保存需要重新创建表格的更改

答案 1 :(得分:0)

如果您确定不会丢失数据,那么:

Update myTable set myNVMaxCol = left(coalesce(myNVMaxCol,''),50);
Alter table myTable alter column myNVMaxCol nvarchar(50) not null;