我试图在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])')
答案 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,它将不会被更新。