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(max)更改为nvarchar(50)_Sql Server_Sql Server 2008 - Fatal编程技术网

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

Sql server 如何将列从nvarchar(max)更改为nvarchar(50),sql-server,sql-server-2008,Sql Server,Sql Server 2008,我在SQLServer2008中已有一个表,其中一列为NVARCHAR(MAX),其中的值小于10个字符。 此表正在生产中,其中包含数据 我有一个要求,我必须将此列从NVARCHAR(MAX)更改为NVARCHAR(50)。T执行此操作时,SQL Server会给出一些截断错误,即使该列中的数据少于10个字符 这是我的剧本: ALTER TABLE [dbo].[Table] ALTER COLUMN [Column1] NVARCHAR ( 50 ) NOT NULL 首先使用此查询检查表

我在SQLServer2008中已有一个表,其中一列为NVARCHAR(MAX),其中的值小于10个字符。 此表正在生产中,其中包含数据


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

这是我的剧本:

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

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

SELECT DATALENGTH(Column_Name) AS FIELDSIZE, Column_Name 
FROM Table_Name 
如果一切正常,您可能已经选中了
防止保存更改
选项。按照以下步骤检查:


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

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

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

确切的错误是什么?您确定数据确实少于10个字符吗?尝试查询行
,其中LEN(Column1)>50
。还请注意,
NVARCHAR(MAX)
是用于存储blob的类型,SQL Server可能不允许更改该类型。这就是为什么您应该发布完整的错误消息“该列中的数据少于10个字符”-您确定吗?有尾随空格很容易。请运行SELECT*FROM dbo.TABLE,其中LEN(Column1)>50。另外,这真的是一个错误,还是一个警告?Hmmmmm-添加到我的上述注释中-LEN不计算尾随空格(根据SQL标准,微软这次非常遵守),因此您必须使用DATALENGTH。由于它是Unicode(NVARCHAR),每个字符有两个字节,因此请检查
其中的DATALENGTH(Column1)>100
我100%确定列数据少于10个字符。但正如您所说,LEN()不计算空格,我需要重新检查。但在任何情况下,如果截断成功,都不会有任何数据丢失。只有在使用糟糕的表设计器时,“防止保存更改”才有效。编写ALTERTABLE语句要简单得多,这需要访问生产数据库上的ManagementStudio。我需要一些基于SQL脚本的解决方案。如果您有live server连接字符串,请尝试通过SQL server进行连接。打开run并键入ssms,然后输入您的服务器名称、身份验证为SQL server身份验证登录名和密码,以及您在应用更改后已在项目连接字符串中使用的此详细信息。然后,将数据移动到新列,删除旧的comun,然后重命名。