2014-09-05 44 views
0

我只是想比較兩個XML和嘗試存儲的差異成稱爲@DiffXML另一個變量,但得到的錯誤稱爲Incorrect syntax near the keyword 'SET'.試圖存儲導致變量SQL Server中的XML格式

只是引導來解決的。感謝

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 2014-09-05 15:11:01