Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 1.
- SELECT *
- FROM logu
- where exists (select * from dxml3.nodes('//*[uz1/@s="a" and uz1/@s="d" and uz1/@s="u"]') T(n))
- declare @xml XML = '<root1 a = "a" id = "2" zzz="d" > <test d = "b" c = "c" id="1" a = "a"/></root1>';
- declare @orderTable TABLE(node NVARCHAR(MAX), attr NVARCHAR(MAX));
- insert into @orderTable values('root1', 'id'), ('test', 'id');
- SET @xml = @xml.query('<newRoot> { for $item in * return $item } </newRoot>');
- DECLARE cursorXML CURSOR FOR
- SELECT n.query('.')
- FROM @xml.nodes('//*[local-name(.)!="newRoot"]') T(n)
- declare @n xml;
- OPEN cursorXML;
- FETCH NEXT FROM cursorXML INTO @n;
- WHILE @@FETCH_STATUS = 0
- BEGIN
- declare @node nvarchar(max) = (select CAST(n.query('local-name(.)') AS VARCHAR(MAX)) from @n.nodes('/*') T(n));
- declare @id nvarchar(max) = (select n.value('.','NVARCHAR(MAX)') from @n.nodes('/*/@*[1]') T(n));
- declare @parent nvarchar(max) = (select CAST(n.query('local-name(..)') AS VARCHAR(MAX)) from @xml.nodes('//*[local-name(.) = sql:variable("@node")][./@*[1] = sql:variable("@id")]') T(n));
- declare @attr nvarchar(max) = (select top 1 attr from @orderTable where node = @node);
- declare @T TABLE(rowNumber INT, attr NVARCHAR(MAX), val NVARCHAR(MAX));
- delete from @T;
- insert into @T
- select ROW_NUMBER() OVER (order by attr), attr, val from
- (select CAST(n.query('local-name(.)') AS VARCHAR(MAX)), n.value('.','NVARCHAR(MAX)')
- FROM @n.nodes('/*/@*[local-name(.) != sql:variable("@attr")]') T(n)) T1(attr,val);
- SET @n.modify('delete /*/@*[local-name(.) != sql:variable("@attr")]');
- DECLARE @i INT = (select count(*) from @T);
- SET @n.modify('delete /*/@*[position()>1]');
- WHILE @i >= 1
- BEGIN
- declare @val nvarchar(max) = (select val from @T where rowNumber = @i);
- SET @n.modify('insert attribute zz { sql:variable("@val") } into (/*)[1]');
- SET @n = replace(cast(@n as nvarchar(max)), 'zz', (select attr from @T where rowNumber = @i));
- SET @i-=1;
- END;
- set @xml.modify('delete //*[local-name(.) = sql:variable("@node")][./@*[1] = sql:variable("@id")]');
- SET @xml.modify('insert sql:variable("@n") into (//*)[local-name(.)=sql:variable("@parent")][1]');
- FETCH NEXT FROM cursorXML INTO @n;
- END;
- close cursorXML;
- DEALLOCATE cursorXML;
- SET @xml = (select top 1 n.query('.') from @xml.nodes('/newRoot/*[1]') T(n));
- select @xml;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement