2012-03-01 2 views
2

내 파이썬 프로그램의 테이블에서 Upsert를 수행하려고합니다. 나는 MERGE 명령을 찾았지만 그것은 두 테이블을 병합하는 것과 관련이있는 것으로 보인다. 하나의 쿼리에서 테이블로 필드를 UPDATE/INSERT하고 싶습니다.SQL 서버에서 동일한 소스/대상 테이블과 함께 MERGE 사용

DELETE보다 빠르며 INSERT 또는 SELECT를 선택한 다음 [INSERT/UPDATE]를 수행하고 MERGE 작업을 시도하려고합니다. 그러나 SSMS에서 실행하면 모두 데이터베이스 테이블의 행이 업데이트됩니다.

쿼리는 다음과 같습니다

MERGE INTO [LastPriceUpdate] USING 
(SELECT [EventID] FROM [LastPriceUpdate] where [EventID] = 1501845) AS source 
ON (source.[EventID] = 1501845) 
WHEN MATCHED THEN UPDATE SET [LastPriceUpdate] = getdate() -- where clause not allowed 
WHEN NOT MATCHED BY TARGET THEN INSERT ([EventID], [LastPriceUpdate]) VALUES (1501845, getdate()); 

그 쿼리는 모든 행을 업데이트하고 나는 단지 그것을 GETDATE() 이벤트 ID = {somenumber}

가능한 대답과 함께 LastPriceUpdate 열 업데이트 할 : 이 힘을 고쳐야한다. ON 부분에서 표적을 사용하십시오.

MERGE INTO [LastPriceUpdate] AS target USING 
(SELECT [EventID] FROM [LastPriceUpdate] where [EventID] = 1501845) AS source 
ON (target.[EventID] = 1501845) 
WHEN MATCHED THEN UPDATE SET [LastPriceUpdate] = getdate() -- where clause not allowed 
WHEN NOT MATCHED BY TARGET THEN INSERT ([EventID], [LastPriceUpdate]) VALUES (1501845, getdate()); 

답변

3

나는 이런 식으로 찾고 있다고 생각합니다.

MERGE INTO LastPriceUpdate as lpu 
USING (
     SELECT getdate() as LastPriceUpdate, 
       1501845 as EventID 
    ) AS src 
ON lpu.EventID = src.EventID 
WHEN MATCHED THEN 
    UPDATE SET LastPriceUpdate = src.LastPriceUpdate 
WHEN NOT MATCHED BY TARGET THEN 
    INSERT (EventID, LastPriceUpdate) 
    VALUES (src.EventID, src.LastPriceUpdate); 
+0

멋진 작업 - 내 작업보다 빠른 작업 –

관련 문제