修改SQL Server表中的XML数据

时间:2018-12-21 13:36:45

标签: sql sql-server xml

我需要修改存储在大约62m行的SQL Server表中的XML数据。

我正在使用以下查询来执行此操作,这是query plan

=query(query(A:F,"where D is not NULL order by A desc limit 7"),"order by Col1")

它已经运行了24个小时以上,并且似乎没有显示任何进度。有没有更好的方法来修改SQL Server中的XML(除了显然不将XML存储在SQL Server中!:)

XML索引对您有帮助吗?

1 个答案:

答案 0 :(得分:1)

如果大约有6200万行,那么更新所有这些行显然将需要一些时间。

但是您可以通过添加WHERE子句来使UPDATE查询可重复,该子句检查XML字段中是否存在标记。
如果该XML没有任何更改,它将不会更新XML。

您实际上并不需要使用FROM,尽管这可能不会对性能产生影响。

UPDATE [Customer].[CorrespondenceLog]
SET 
 XMLContent.modify('delete //account/correspondence/contact[1]')
WHERE    XMLContent.exist('//account/correspondence/contact[1]') = 1

如果分批执行此操作,则在另一个非XML字段上建立索引可能会很有用。
例如,如果某个日期字段上有一个索引(或分区?),并且您要更新日期范围。

添加XML index可以在某种程度上帮助查找包含标签的XML。
但是不确定仅删除标签是否值得。

CREATE PRIMARY XML INDEX PIdx_CorrespondenceLog_XMLContent 
ON [Customer].[CorrespondenceLog]([XMLContent]);

CREATE XML INDEX PIdx_CorrespondenceLog_XMLContent_PATH 
ON [Customer].[CorrespondenceLog]([XMLContent])
USING  XML INDEX PIdx_CorrespondenceLog_XMLContent FOR PATH; 

db <>提琴here