2014-09-05 2 views
0

Я просто пытаюсь сравнить два XML и попытаться сохранить разницу в другой переменный с именем @DiffXML, но получаю ошибку называет Incorrect syntax near the keyword 'SET'.Попытки сохранить результат в формате XML в переменном сервере SQL

только руководством, что исправить. благодаря

DECLARE @XML1 XML 
DECLARE @XML2 XML 

DECLARE @DiffXML nvarchar(max) 
SET @DiffXML='' 

SET @XML1 = 
'<NewDataSet> 
<Employee> 
<EmpID>1005</EmpID> 
<Name> keith </Name> 
<DOB>12/02/1981</DOB> 
<DeptID>ACC001</DeptID> 
<Salary>10,500</Salary> 
</Employee> 
</NewDataSet>' 

SET @XML2 = 
'<NewDataSet> 
<Employee> 
<EmpID>1006</EmpID> 
<Name> keith </Name> 
<DOB>05/02/1981</DOB> 
<DeptID>ACC002</DeptID> 
<Salary>10,900</Salary> 
</Employee> 
</NewDataSet>' 

;with XML1 as 
(
    select T.N.value('local-name(.)', 'nvarchar(100)') as NodeName, 
     T.N.value('.', 'nvarchar(100)') as Value 
    from @XML1.nodes('/NewDataSet/Employee/*') as T(N) 
), 
XML2 as 
(
    select T.N.value('local-name(.)', 'nvarchar(100)') as NodeName, 
     T.N.value('.', 'nvarchar(100)') as Value 
    from @XML2.nodes('/NewDataSet/Employee/*') as T(N) 
) 

SET @DiffXML=(select * from 
(
    select coalesce(XML1.NodeName, XML2.NodeName) as FieldName, 
      XML1.Value as OldValue, 
      XML2.Value as NewValue 
    from XML1 
     full outer join XML2 
     on XML1.NodeName = XML2.NodeName 
    where coalesce(XML1.Value, '') <> coalesce(XML2.Value, '')  
) x FOR xml AUTO,elements XSINIL) 

print @DiffXML 

ответ

1

Изменение, что из

SET @DiffXML=(select * from 

в

SELECT @DiffXML=(select * from 

, и вы получите ваш результат печататься

+1

ваши советы работали. Я обновил свой вопрос. пожалуйста, посмотрите и ответьте. благодаря – Thomas

Смежные вопросы