2010-03-08 82 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) 

我發現的文檔在這些閾值上有點模糊。