使用条件将列varchar(max)更改为nvarchar(max)

时间:2015-07-01 07:23:34

标签: sql sql-server

我的列order的数据类型为emailbody,但我想将其更改为varchar(max)

如何检查nvarchar(max)条件的长度?

varchar(max)

3 个答案:

答案 0 :(得分:1)

nvarchar(max)varbinary(max)-1表示长度为if not exists (select name from syscolumns where name = 'emailbody' and id = OBJECT_ID('emailtb') and xtype = 167 and [length] = -1) ALTER TABLE emailtb ALTER COLUMN emailbody nvarchar(max) 。所以:

<item name="android:windowContentTransitions">true</item>
<item name="android:windowAllowEnterTransitionOverlap">true</item>
<item name="android:windowAllowReturnTransitionOverlap">true</item>

有关其他详细信息,请参阅the documentation about sys.columns

答案 1 :(得分:0)

更改以下Source:

select character_maximum_length    
from information_schema.columns  
where table_name = 'emailtb' AND column_name='emailbody'

将为您提供长度。

在您的上下文中:

if not exists (select name from syscolumns where name = 'emailbody' and id = OBJECT_ID('emailtb') and xtype = 167 and [length] = (select character_maximum_length from information_schema.columns where table_name = 'emailtb' AND column_name='emailbody'))
ALTER TABLE emailtb ALTER COLUMN emailbody nvarchar(max)

快速解释:

  

信息架构视图是SQL Server为获取元数据提供的几种方法之一。信息架构视图提供SQL Server元数据的内部系统表独立视图。尽管已对基础系统表进行了重大更改,但信息模式视图使应用程序能够正常工作。 SQL Server中包含的信息架构视图符合INFORMATION_SCHEMA的ISO标准定义。

有关information_schema的更多信息,请参阅 this MSDN文章。

答案 2 :(得分:0)

如果varchar(max)列中的任何字符串长度超过1 GB - 1个字节(1'073'741'823个字节),那么您将能够将其转换为nvarchar(max)

像这样检查:

SELECT emailbody, DATALENGTH(emailbody)
FROM dbo.emailtb 
WHERE DATALENGTH(emailbody) > 1073741823

如果您发现任何行 - 您需要缩短这些emailbody内容或删除这些行,然后才能转换为nvarchar(max)