[英]Cannot call methods on varchar(max)
我试图在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])')
您能够处理此问题的唯一方法是将数据插入(临时)表中的实际xml
数据类型,对该表运行UPDATE
,然后UPDATE
原始数据。 如果SiteID
是唯一的,则可以执行以下操作:
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。 如果您的varchar(MAX)
包含无效的XML,则不会更新。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.