请考虑这个XML:
<Employees>
<Person>
<ID>1000</ID>
<Name>Nima</Name>
<LName>Agha</LName>
</Person>
<Person>
<ID>1001</ID>
<Name>Ligha</Name>
<LName>Ligha</LName>
</Person>
<Person>
<ID>1002</ID>
<Name>Jigha</Name>
<LName>Jigha</LName>
</Person>
<Person>
<ID>1003</ID>
<Name>Aba</Name>
<LName>Aba</LName>
</Person>
</Employees>
我想编写一个获取数字的过程然后将元素插入第n个Person元素。例如,如果1传递给我的程序,我将元素插入第一个人元素。
答案 0 :(得分:5)
DECLARE @AttributeValue NVARCHAr(100) = 'TestValue';
DECLARE @NodeNR INT = 3
DECLARE @XML XML = '<Employees>
<Person>
<ID>1000</ID>
<Name>Nima</Name>
<LName>Agha</LName>
</Person>
<Person>
<ID>1001</ID>
<Name>Ligha</Name>
<LName>Ligha</LName>
</Person>
<Person>
<ID>1002</ID>
<Name>Jigha</Name>
<LName>Jigha</LName>
</Person>
<Person>
<ID>1003</ID>
<Name>Aba</Name>
<LName>Aba</LName>
</Person>
</Employees>';
SET @XML.modify('insert attribute Attribute {sql:variable("@AttributeValue")} into (/Employees/Person[position()=sql:variable("@NodeNr")])[1]')
答案 1 :(得分:5)
DECLARE @data XML =
'
<Employees>
<Person>
<ID>1000</ID>
<Name>Nima</Name>
<LName>Agha</LName>
</Person>
<Person>
<ID>1001</ID>
<Name>Ligha</Name>
<LName>Ligha</LName>
</Person>
<Person>
<ID>1002</ID>
<Name>Jigha</Name>
<LName>Jigha</LName>
</Person>
<Person>
<ID>1003</ID>
<Name>Aba</Name>
<LName>Aba</LName>
</Person>
</Employees>
'
DECLARE @offset INT = 2
DECLARE @value VARCHAR(100) = 'newvalue'
SET @data.modify('insert <NewAttribute>{sql:variable("@value")}</NewAttribute> as last into (/Employees/Person)[sql:variable("@offset")][1]')
SELECT @data
答案 2 :(得分:0)
试试这个 -
DECLARE @Param INT = 1000
DECLARE @NodeID INT = 2
DECLARE @XML XML = '
<Employees>
<Person>
<ID>1000</ID>
<Name>Nima</Name>
<LName>Agha</LName>
</Person>
<Person>
<ID>1001</ID>
<Name>Ligha</Name>
<LName>Ligha</LName>
</Person>
<Person>
<ID>1002</ID>
<Name>Jigha</Name>
<LName>Jigha</LName>
</Person>
<Person>
<ID>1003</ID>
<Name>Aba</Name>
<LName>Aba</LName>
</Person>
</Employees>'
DECLARE @SQL NVARCHAR(MAX) = '
DECLARE @XML XML = @XML_Param
DECLARE @Id INT = @Value_Param
SET @XML.modify(''insert attribute Id {sql:variable("@Id")} into (/Employees/Person)[' + CAST(@NodeID AS VARCHAR) + ']'')
SELECT @XML_Output = @XML'
DECLARE @Definition NVARCHAR(500) =
N'@XML_Param XML, @Value_Param INT, @Node_Param INT, @XML_Output XML OUTPUT'
DECLARE @XMLResult XML
EXEC sys.sp_executesql
@SQL
, @Definition
, @XML_Param = @XML
, @Value_Param = @Param
, @Node_Param = 1
, @XML_Output = @XMLResult OUTPUT
SELECT @XMLResult