目前我有一個使用Cursor的大存儲過程,裏面有兩個合併語句。簡而言之,我想從一張大桌子填充2張桌子。子查詢返回了多個值。使用merge和tsql
現在,我對sql很陌生,並且閱讀了一些內容以擴展我的知識。在這項研究中,我遇到了很多討論遊標和他們可能給出的性能問題的主題。
當前的SP(使用光標)工作正常,但我堅持嘗試使用我的代碼而不使用遊標(其他POV),它會讓我感到困惑。
所以現在我被這個小小的垃圾代碼卡住了。我認爲不可能以我想要的方式去做,但是我可以嘗試。
錯誤:子查詢返回多個值。這當子查詢跟隨不允許=,=,<,...
代碼:
MERGE CONTACTS as target
USING STAGING_CONTACTS as source
ON (target.ID = source.ID)
WHEN MATCHED THEN
UPDATE SET
MAIL = (SELECT MAIL FROM STAGING_CONTACTS),
NAME = (SELECT NAME FROM STAGING_CONTACTS),
BRAND = (SELECT BRAND FROM STAGING_CONTACTS),
ID = (SELECT ID FROM STAGING_CONTACTS)
WHEN NOT MATCHED THEN
INSERT (MAIL, NAME, BRAND, CORESOLEIL_ID)
VALUES ((SELECT MAIL FROM STAGING_CONTACTS),
(SELECT NAME FROM STAGING_CONTACTS),
(SELECT BRAND FROM STAGING_CONTACTS),
(SELECT ID FROM STAGING_CONTACTS));
這是兩個合併報表我有一個,這是一個更小。
歡迎任何反饋!
感謝提前:)
合併是一個有缺陷的實現,是非常困難的調試後,當有潛在的數據問題。我永遠不會允許任何人在我們的生產數據庫中使用它。更好地使用更新語句後跟一個插入(順序很重要) – HLGEM
https://www.mssqltips.com/sqlservertip/3074/use-caution-with-sql-servers-merge-statement/ –