无法在varchar(max)上调用方法

时间:2019-03-05 19:13:03

标签: sql sql-server xml

我试图在SQL Server中修改/更新类型varchar(max)的xml列。

但是我遇到了这个错误:

  

无法在varchar(max)上调用方法

这是我的表结构和查询:

CREATE TABLE #Sites
(
    [SiteID] [INT] IDENTITY(1,1) NOT NULL,
    [SiteInfo] VARCHAR(MAX),
    [InVal] VARCHAR(50) NULL,
    [InVal1] VARCHAR(50) NULL
)

UPDATE #Sites 
SET [SiteInfo].modify('insert <SiteID/> into (/SiteInfo[1])') 

1 个答案:

答案 0 :(得分:2)

您要处理此问题的唯一方法是将数据插入(临时)表中实际的xml数据类型中,在该数据类型上运行UPDATE,然后{ {1}}您的原始数据。假设UPDATE唯一,则您可以执行以下操作:

SiteID

但是,这将不及性能,并且将无法处理不良的XML;如果您的CREATE TABLE #Sites (id int IDENTITY(1,1), NotXML varchar(MAX)) INSERT INTO #Sites (NotXML) VALUES ('<SiteInfo><name>jagadish</name><state>NJ</state></SiteInfo>') GO CREATE TABLE #XML (id int, RealXML xml); INSERT INTO #XML SELECT id, TRY_CONVERT(xml,NotXML) FROM #Sites WHERE id = 1 AND TRY_CONVERT(xml,NotXML) IS NOT NULL; --as we can't deal with bad XML UPDATE #XML SET [RealXML].modify('insert <SiteID/> into (/SiteInfo[1])'); UPDATE S SET NotXML = CONVERT(varchar(MAX),X.RealXML) FROM #Sites S JOIN #XML X ON S.id = X.id; SELECT NotXML FROM #Sites; DROP TABLE #XML; GO DROP TABLE #Sites; 包含无效的XML,它将不会被更新。