Три, казалось бы, идентичные запросы XML-узлов(), но первый возвращает другой результат для первой строки для столбцов: Location1, Location2, Location3
Почему это другое?
Спасибо заранее.SQL: узлы XML(): идентичные запросы: различный результат
declare @xml xml
set @xml =
'<root>
<Location1 LocationID="10">
<step1>apple</step1>
<step2>banana</step2>
</Location1>
<Location2 LocationID="20">
<step1>carrot</step1>
<step2>donut</step2>
</Location2>
<Location3 LocationID="30">
<step1>egg</step1>
<step2>fry</step2>
</Location3>
</root>'
declare @SQL nvarchar(max) = ''
declare @Col nvarchar(max) = ', N.value(''[COLNAME][1]'', ''varchar(100)'') as [COLNAME]'
select @SQL = @SQL + replace(@Col, '[COLNAME]', N.value('local-name(.)', 'sysname'))
from @XML.nodes('//*') as T(N)
set @SQL = 'select '+stuff(@SQL, 1, 2, '')+' from @XML.nodes(''//*'') as T(N)'
exec sp_executesql @SQL, N'@XML xml', @XML
declare @sql2 nvarchar(max) = ''
set @sql2 =
'select
n.value(''root[1]'',''varchar(100)'') as root,
n.value(''location1[1]'',''varchar(100)'') as location1,
n.value(''step1[1]'',''varchar(100)'') as step1,
n.value(''step2[1]'',''varchar(100)'') as step2,
n.value(''location2[1]'',''varchar(100)'') as location2,
n.value(''step1[1]'',''varchar(100)'') as step1,
n.value(''step2[1]'',''varchar(100)'') as step2,
n.value(''location3[1]'',''varchar(100)'') as location3,
n.value(''step1[1]'',''varchar(100)'') as step1,
n.value(''step2[1]'',''varchar(100)'') as step2
from @xml.nodes(''//*'') as t(n)'
exec sp_executesql @SQL2, N'@XML xml', @XML
select
n.value('root[1]','varchar(100)') as root,
n.value('location1[1]','varchar(100)') as location1,
n.value('step1[1]','varchar(100)') as step1,
n.value('step2[1]','varchar(100)') as step2,
n.value('location2[1]','varchar(100)') as location2,
n.value('step1[1]','varchar(100)') as step1,
n.value('step2[1]','varchar(100)') as step2,
n.value('location3[1]','varchar(100)') as location3,
n.value('step1[1]','varchar(100)') as step1,
n.value('step2[1]','varchar(100)') as step2
from @xml.nodes('//*') as t(n)
PS: ОК. Это не позволит мне опубликовать это, не написав больше, так что: В конечном счете, я пытаюсь заставить SQL проанализировать XML-файл в таблице с узлами, элементами и атрибутами в качестве заголовков столбцов с их соответствующими значениями или подносами, перечисленными ниже , Что-то вроде этого (я не мог получить изображение для загрузки, мы надеемся, верстку останется):
root Location1 LocationID Step1 Step2 Location2 Location3
Location1 LocationID 10
Step1 apple
Step2 banana
Location2 20 LocationID
carrot Step1
donut Step2
Location3 30 LocationID
egg Step1
fry Step2
По какой-то причине, это высокий заказ для SQL, но я до сих пор интересно, почему разница в приведенных выше запросов ,
ДУХ. Я должен был это заметить. Благодарю. – user2752528