繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM