-1
我试图这样做:SQL:在XML modify()语句中,您可以使用变量作为标记名吗?
SET @ xml.modify ( '插入< @x)> @ Y考虑(/东西)[ID = “@ ID”] [1]')
我想出了当我用{sql:variable(“@ y”)}替换@y时,它工作正常。 但它不适用于@x。
有没有办法让它工作?
我试图这样做:SQL:在XML modify()语句中,您可以使用变量作为标记名吗?
SET @ xml.modify ( '插入< @x)> @ Y考虑(/东西)[ID = “@ ID”] [1]')
我想出了当我用{sql:variable(“@ y”)}替换@y时,它工作正常。 但它不适用于@x。
有没有办法让它工作?
无法插入具有动态名称的元素。看看这些例子:
DECLARE @x XML=
N'<root>
<test>Some test value</test>
</root>';
随和,一切固定的文字
SET @x.modify('insert <blah>new element</blah> as first into (/root)[1]')
SELECT @x;
结果
<root>
<blah>new element</blah>
<test>Some test value</test>
</root>
动态内容
DECLARE @content NVARCHAR(100)='dynamic content'
SET @x.modify('insert <blah>{sql:variable("@content")}</blah> as first into (/root)[1]');
SELECT @x;
结果
<root>
<blah>dynamic content</blah>
<blah>new element</blah>
<test>Some test value</test>
</root>
这是不允许的,并会导致错误
DECLARE @element NVARCHAR(100)='dynElement';
SET @x.modify('insert <{sql:variable("@element")}>{sql:variable("@content")}</{sql:variable("@element")}> as first into (/root)[1]');
SELECT @x;
但是你可以在外部建立完整的XML元素并将其插入原样
DECLARE @new_element XML='<dynElement>Some dynamic content</dynElement>';
SET @x.modify('insert sql:variable("@new_element") as first into (/root)[1]');
SELECT @x;
结果
<root>
<dynElement>Some dynamic content</dynElement>
<blah>dynamic content</blah>
<blah>new element</blah>
<test>Some test value</test>
</root>
这个会导致同样的结果
DECLARE @new_element XML=(SELECT 'Some dynamic content' FOR XML PATH('dynElement'));
SET @x.modify('insert sql:variable("@new_element") as first into (/root)[1]');
SELECT @x;
这 - 完全参数化 - 也将返回相同的
DECLARE @element NVARCHAR(100)='dynElement';
DECLARE @content NVARCHAR(100)='dynamic content'
DECLARE @new_element XML='<' + @element +'>' + @content + '</' + @element + '>';
SET @x.modify('insert sql:variable("@new_element") as first into (/root)[1]');
SELECT @x;
@ xml.modify(“插入<@x> @y@x>成(/东西)[ID = “@ ID”] [1]') –