【发布时间】:2016-05-26 15:24:08
【问题描述】:
在我继承以支持的数据库中,有几个表的 NVARCHAR(MAX) 列包含一团无类型 XML 数据。我的任务是在这些 XML blob 中搜索对给定 ID 的引用,然后在找到第一个引用时停止并报告找到的内容。我目前正在遍历每一行,将 blob 转换为 XML,然后使用 XQuery 在 blob 中搜索 ID。
但是,由于表中的行数过多,将 NVARCHAR 值初始转换为 XML 的时间过长。下面是我用来转换每个 blob 的代码示例,HistoryID 是 PK,值发生变化以从 XMLData 获取下一个 XML blob:
SELECT @XML = CONVERT(XML, XMLData)
FROM dbo.History
WHERE HistoryID = 1;
我也尝试过利用 C# 和 LINQ,但 XML blob 太大而无法从 .NET 到 SQL Server 来回传递。不幸的是,我也无法在不破坏应用程序的情况下修改现有表。有没有更好的方法将这些 XML blob 转换为可搜索的形式,或者我只是 SOL?
【问题讨论】:
-
需要转成xml吗?你不能简单地用 patindex 搜索 nvarchar 吗?
-
你能展示一个xml结构的例子吗?..
-
每行典型的 XML blob 有多大?
-
@JamieD77,不幸的是,XML 包含大量 PII 数据,但我可以说它们似乎有 3,000-4,000 行长,并且嵌套深度为 8 层。
-
@WillC 看起来最小为 22 字节,最大为 340 MB,平均为 6 MB。
标签: c# sql-server xml linq tsql