Извлечение XML-документа - PullRequest
       2

Извлечение XML-документа

0 голосов
/ 22 января 2019

Я пытаюсь извлечь данные из столбца XML в таблице и понял, что никогда не смогу найти что-то очень хорошее, так как форматирование содержит & lt и другие символы. С тех пор я преобразовал документ в переменную nvarchar, чтобы я мог выполнять свои собственные поиски посредством поиска по тексту.

Я сделал это вместе (ужасно, извините), и теперь я думаю, что, возможно, было бы лучше использовать таблицу tmp, но в любом случае.

Я понял, что не собираю по записи @profilename из-за того, что используется TOP 1, но хотел бы, чтобы он появлялся в основном теле выбора для каждой записи, но я немного растерялся ...

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>low</LoggingLevel"))]') = 1

Я ищу выбор в представлении, которое я представляю, но не могу определить, куда он должен идти или как его отформатировать ...

Я ценю любую помощь, которую вы можете оказать.

1 Ответ

0 голосов
/ 24 января 2019

Это было исправлено с помощью приведенного ниже .... Была схема, я просто не смог ее использовать.

;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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...