我有從源表中將數據加載到目標表的情況。如果來自源的數據不在目標中,那麼我需要插入。如果它已經存在於目標表中,則將該行的狀態更新爲'過期'並將該列作爲新行插入。我用合併查詢來做到這一點。如果不存在,我可以插入,我也可以更新。但在匹配時嘗試插入時,它表示在'when matched'子句中不允許插入。 請幫我..謝謝提前在SQL Server 2008中合併查詢
回答
如果您想對單行的源數據執行多個操作,您需要以某種方式複製該行。
類似以下(佔表名稱等):
;WITH Source as (
SELECT Col1,Col2,Col3,t.Dupl
FROM SourceTable,(select 0 union all select 1) t(Dupl)
)
MERGE INTO Target t
USING Source s ON t.Col1 = s.Col1 and s.Dupl=0 /* Key columns here */
WHEN MATCHED THEN UPDATE SET Expired = 1
WHEN NOT MATCHED AND s.Dupl=1 THEN INSERT (Col1,Col2,Col3) VALUES (s.Col1,s.Col2,s.Col3);
你總是希望在不匹配的分支s.Dupl條件,否則源行不匹配任何目標行將被插入兩次。
從您發佈的評論的例子,我會改變:
MERGE target AS tar USING source AS src ON src.id = tar.id
WHEN MATCHED THEN UPDATE SET [email protected], C_IS_ACTIVE='N', [email protected]
WHEN NOT MATCHED THEN INSERT (col1,col2,col3) VALUES (tar.col1,tar.col2,tar.col3);
到:
;WITH SourceDupl AS (
SELECT id,col1,col2,col3,t.Dupl
FROM source,(select 0 union all select 1) t(Dupl)
)
MERGE target AS tar USING SourceDupl as src on src.id = tar.id AND Dupl=0
WHEN MATCHED THEN UPDATE SET [email protected], C_IS_ACTIVE='N', [email protected]
WHEN NOT MATCHED AND Dupl=1 THEN INSERT (col1,col2,col3) VALUES (src.col1,src.col2,src.col3);
我的VALUES
子句中更改的值,因爲在一個NOT MATCHED分支,tar表沒有一行可以從中選擇值。
當我第一次插入數據時,可以執行'WHEN NOT MATCHED'。在下一次,當數據存在時,它執行更新,並且對於Insert,您希望我使用之前聲明的相同'WHEN NOT MATCHED'子句執行更新。合併是否會允許2'WHEN NOT MATCHED'子句。我能做些什麼來區分'WHEN NOT MATCHED'條款 –
@ user549903 - 我不確定你現在要求什麼。在我展示的陳述中,如果目標表中有匹配的行,UPDATE和INSERT都會發生。 –
MERGE目標AS目標使用源AS src ON src.id = tar.id WHEN MATCHED THEN UPDATE SET D_VALID_TO = @ nowdate-1,C_IS_ACTIVE ='N',D_LAST_UPDATED_DATE = @ nowdate WHEN NOT MATCHED THEN INSERT(col1,col2, col3) VALUES(tar.col1,tar.col2,tar.col3); –
檢查出一顆顆鏈接:
- Using SQL Server 2008's MERGE Statement
- MERGE on Technet
- Introduction to MERGE statement
- SQL Server 2008 MERGE
沒有真正知道什麼你的數據庫表l ook like,我們不能有更多的幫助 - 你需要閱讀這些文章,並找出自己如何將這個應用到你的具體情況。
- 1. SQL Server 2008的合併兩個查詢
- 2. SQL Server 2008中合併
- 3. 合併在SQL Server 2008 R2
- 4. SQL Server 2008查詢
- 5. Sql Server 2008查詢
- 6. SQL查詢在SQL Server 2008中
- 7. SQL Server 2008 - 並行執行查詢
- 8. 在SQL Server 2008中合併兩個表
- 9. SQL Server 2008 R2合併
- 10. SQL Server 2008 + TVP合併
- 11. SQL Server 2000和SQL Server 2008查詢
- 12. 在SQL Server 2008 R2中查詢Xml
- 13. 在sql server 2008中查詢xml
- 14. 「Group By *」在SQL Server 2008查詢中?
- 15. 查詢問題在SQL Server 2008中
- 16. 查詢在SQL Server中加入2008
- 17. 排除在SQL Server 2008中查詢
- 18. SQL Server 2008中查詢在線
- 19. 的SQL Server 2008:合併兩個複雜的查詢
- 20. SQL Server 2008中的複雜SQL查詢
- 21. SQL查詢邏輯 - SQL Server 2008中
- 22. 循環在SQL查詢的SQL Server 2008
- 23. 查詢優化SQL Server 2008
- 24. SQL Server 2008 Express的查詢
- 25. SQL Server 2008/Reporting Services查詢
- 26. SQL Server 2008 XML查詢
- 27. 查詢從SQL Server 2008
- 28. SQL Server 2008像查詢
- 29. SQL Server 2008分層查詢
- 30. Sql server 2008查詢php
告訴我們你已經擁有的!並解釋你的桌子是什麼樣的! –