我的列order
的数据类型为emailbody
,但我想将其更改为varchar(max)
。
如何检查nvarchar(max)
条件的长度?
varchar(max)
答案 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)