正在提取 XML 文档

Extracting XML document

我正在尝试从 table 中的 XML 列中提取数据,但我意识到我永远无法很好地找到内容,因为格式包含 < 和其他字符.我已将文档转换为 nvarchar 变量,以便我可以通过搜索文本来执行自己的查找。

我把它拼凑在一起(很糟糕,对不起),我现在想我可能最好使用 tmp table 但无论如何。

我意识到我没有捕获 @profilename 的每条记录,因为使用了 TOP 1,但我也希望它能在每条记录的基础上出现在主 select 正文中,但是我有点迷路...

DECLARE @LOGGING AS nvarchar(10)
DECLARE @Profilename nvarchar(100)
DECLARE @configxml_vchar nvarchar(MAX)
DECLARE @configxml XML
SET @Profilename = NULL
SET @LOGGING = 'low'
SET @configxml = (Select TOP 1 configxml from dirsyncpro.dbo.bt_config ) ----where bt_config_pk = 5
SET @configxml_vchar = (select cast(@configxml as nvarchar(max)))
SET @profilename = (SELECT SUBSTRING(@configxml_vchar, CHARINDEX('SyncName', @configxml_vchar)
, CHARINDEX('/SyncName',@configxml_vchar) - CHARINDEX('SyncName', @configxml_vchar) + Len('/SyncName')))
select @Profilename AS ProfileName, BT_Config_PK AS ProfileID, LastModified, ConfigXML, @LOGGING AS LogLevel from DirSyncPro.dbo.BT_Config where configxml.exist('//*/text()[contains(upper-case(.),upper-case("LoggingLevel&gt;low&lt;/LoggingLevel"))]') = 1

我正在寻找一个 select 中的一个 select 我想但不能把它放在哪里或如何格式化它...

感谢您提供的任何帮助。

这已通过以下方式修复...。有一个模式,我只是没能使用它。

;WITH XMLNAMESPACES
('http://schemas.datacontract.org/2004/07/BinaryTree.DirSync.Common' AS ns) SELECT BT_Config_PK AS ConfigID, CONVERT(XML, C.ConfigXML.value('(/)[1]', 'nvarchar(max)')).value('(/ns:DirSyncProfile/ns:SyncName)[1]', 'nvarchar(max)') AS ProfileName, CONVERT(XML, C.ConfigXML.value('(/)[1]', 'nvarchar(max)')).value('(/ns:DirSyncProfile/ns:Common/ns:LoggingLevel)[1]', 'nvarchar(max)') AS LoggingLevel FROM BT_Config AS C