У меня есть структура XML, которую я получил, сериализовав словарь в C #.Я делаю это, чтобы добавить один столбец AdditionalSettings в таблицу против нескольких дополнительных столбцов, и это прекрасно работает.
Структура XML выглядит следующим образом:
<Settings xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Setting>
<Name>Setting1</Name>
<Value xmlns:d3p1="http://www.w3.org/2001/XMLSchema" i:type="d3p1:boolean">true</Value>
</Setting>
<Setting>
<Name>Setting2</Name>
<Value xmlns:d3p1="http://www.w3.org/2001/XMLSchema" i:type="d3p1:boolean">true</Value>
</Setting>
Таблица имеет несколько столбцов, подобных этому:
ID (INT)
Setting1 (BIT)
Setting2 (BIT)
Я думаю, что я близок к решению.Это тот SQL, который у меня есть.Проблема в том, что я не получаю пространства имен для элемента Value.
WITH XMLNAMESPACES ('http://www.w3.org/2001/XMLSchema-instance' AS i)
SELECT TOP 1 'Setting1' AS [Setting/Name],
CASE Setting1 WHEN 1 THEN 'true' ELSE 'false' END AS [Setting/Value]
FROM MyTable
FOR XML PATH('Settings')
Вывод этого SQL выглядит следующим образом:
<Settings xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Setting>
<Name>Setting1</Name>
<Value>true</Value>
</Setting>
</Settings>
РЕДАКТИРОВАТЬ: вместо выполнения SQL дляподдельная таблица, я создал SQL для временной таблицы, которая показывает, что я пытаюсь сделать.
DECLARE @TestTable TABLE (ID INT IDENTITY(1, 1) PRIMARY KEY, [Name] VARCHAR(10), Setting1 BIT, Setting2 BIT)
INSERT INTO @TestTable (Name, Setting1, Setting2)
VALUES
('Test1', 0, 0),
('Test2', 0, 1),
('Test3', 1, 0),
('Test4', 1, 1);
WITH XMLNAMESPACES ('http://www.w3.org/2001/XMLSchema-instance' AS i)
SELECT TOP 1 'Setting1' AS [Setting/Name],
CASE Setting1 WHEN 1 THEN 'true' ELSE 'false' END AS [Setting/Value]
FROM @TestTable
WHERE Setting1 = 1
FOR XML PATH('Settings')