2016-09-03 3 views
1

SQL Server 2012 MERGE을 사용하여 XML 스트림에서 테이블의 둘 이상의 레코드를 업데이트 할 수 있습니까? 다음과 같이단일 SQL Server MERGE (XML에서) MERGE 테이블에있는 여러 레코드 업데이트

내 테이블입니다 : 1 일 기준,

enter image description here

몇 번이나 다음과 같은 XML 봉투가 나타납니다

<WeatherForecastUpdate> 
    <Location Temperature="67" Id="56"> 
     <Humidity>78%</Humidity> 
     <Condition>Rain</Condition> 
     <Wind>5mph</Wind> 
    </Location> 
    <Location Temperature="72" Id="783"> 
     <Humidity>51%</Humidity> 
     <Condition>Clear</Condition> 
     <Wind>5mph</Wind> 
    </Location> 
</WeatherForecastUpdate> 

내가 XML에서 LocationID를 기반으로 날씨 데이터를 업데이트 할 필요를 . 각 메시지 (위치)를 MERGE하는 방법을 알고 있지만, 단일 MERGE 내의 모든 테이블 레코드를 업데이트하는 방법이 있는지 궁금합니다.

+0

는보기 ... – har07

+0

왜 당신이 원하는을 레코드를 갱신하고 싶을 때'MERGE'를 사용하십시오. 이것을하기 위해'UPDATE' 문을 사용하십시오. –

답변

2

예! 테이블에 처음으로 변환 XML에서 다음 병합

DECLARE @x xml = N'<WeatherForecastUpdate> 
    <Location Temperature="67" Id="56"> 
     <Humidity>78%</Humidity> 
     <Condition>Rain</Condition> 
     <Wind>5mph</Wind> 
    </Location> 
    <Location Temperature="72" Id="783"> 
     <Humidity>51%</Humidity> 
     <Condition>Clear</Condition> 
     <Wind>5mph</Wind> 
    </Location> 
</WeatherForecastUpdate>' 

;WITH cte AS (
    SELECT t.v.value('@Temperature','int') Temperature, 
      t.v.value('@Id','int') Id, 
      t.v.value('(./Humidity)[1]','nvarchar(5)') Humidity, 
      t.v.value('(./Condition)[1]','nvarchar(10)') Condition, 
      t.v.value('(./Wind)[1]','nvarchar(10)') Wind 
    FROM @x.nodes('/WeatherForecastUpdate/Location') as t(v) 
) 

MERGE YourTable as t 
USING cte as s 
ON t.LocationID = s.ID 
WHEN MATCHED THEN 
    UPDATE SET Temp = s.Temperature, 
       Humidity = s.Humidity, 
       Wind = s.Wind 

또 다른 방법은 간단 UPDATE 사용 : 당신이 어떻게했는지는 하나의 메시지 (위치) 인 경우

UPDATE t 
SET Temp = s.Temperature, 
    Humidity = s.Humidity, 
    Wind = s.Wind 
FROM YourTable t 
INNER JOIN cte s 
    ON t.LocationID = s.ID 
+1

'UPDATE'는 이것을하기 위해 사용해야합니다. –

+0

놀라운! 고맙습니다. 많은 경우 MERGE 절을 사용했지만 UPDATE는 더 깨끗하고 논리적입니다. –

+0

사실 - 그 특별한 경우에는 무엇을 사용 하든지간에 : 업데이트와 병합하거나 업데이트 만합니다. 두 가지 솔루션 모두 필요한 것을 제공합니다. – gofr1