如何在T-SQL中获取列或变量的实际类型?
我知道SQL_VARIANT_PROPERTY
,但对于NVARCHAR(MAX)
它会失败:
DECLARE @foo1 NVARCHAR(10) = N'a'
SELECT SQL_VARIANT_PROPERTY(@foo1, 'BaseType') --works fine
DECLARE @foo2 NVARCHAR(MAX) = N'a'
SELECT SQL_VARIANT_PROPERTY(@foo2, 'BaseType') --fails with an error:
--Operand type clash: nvarchar(max) is incompatible with sql_variant
是否有其它方法可以判断变量是否包含NVARCHAR(MAX)
类型的值?
背景信息:
我正在编写一份程序,用于重新排列表格中的列:重命名旧表,创建新表,复制数据并删除旧表。为了达到目的,需要在新表上重新创建所有索引、视图、约束等内容。
我希望确保在这个自动过程中不会遗漏任何东西。因此,我想将大部分来自相关系统表的值复制到一个通用的临时表中,并在重新排列后进行比较。现在,这个过程已经完美地运作,但在尝试检测nvarchar(max)-列类型时失败了。