2010-03-08 71 views
2

我想插入一个值到sql_variant列sql服务器从xml列插入sql_variant列在sql服务器

前。

INSERT INTO 
    [dbo].[TestColumn] 
(
    Id, 
    Attribute, 
    AttributeValue 
) 
SELECT 
    Id, 
    'TestName', 
    CAST(CustomColumns.query('//TestName') AS nVarchar(MAX)) 
FROM 
    [dbo].[Clmnt] (NOLOCK) 

我得到这个错误,

Operand type clash: nvarchar(max) is incompatible with sql_variant 

任何人对此有任何线索,如何方便地插入在SQL_VARIANT值?

回答

6

SQL_VARIANT不能存储为nvarchar(最大)

sql_variant (Transact-SQL)

这种联系说,值以下的类型不能使用SQL_VARIANT存储:

varchar(max) 
varbinary(max) 
nvarchar(max) 
xml 
text 
ntext 
image 
timestamp 
sql_variant 
geography 
hierarchyid 
geometry 
User-defined types 
+0

同意。那么我如何插入数据呢? – 2010-03-08 18:43:45

+0

不要使用sql_variant列,可能是nvarchar(max)甚至是xml。虽然看起来您使用的是价值属性设计,但您在原始问题中没有解释您的模式,因此有点难以展开。 – 2010-03-08 18:48:50

+3

你可以尝试:'CAST(CustomColumns.query('// TestName')AS nVarchar(8000))',它只在你的XML小于8000个字符时才起作用。 – 2010-03-08 18:50:49

1

SQL_VARIANT不支持字符串。对于SQL Server 2008 R2:

nvarchar(4000) but not nvarchar(max). 
varchar(8000) but not varchar(max) 

我发现的文档在这些阈值上有点模糊。