現在、私はカーソルを使用して大きなストアドプロシージャを持っており、内部は2つのマージステートメントです。まもなく言った、私は1つの大きなテーブルから2つのテーブルを設定したい。サブクエリーが2つ以上の値を返しました。 mergeとtsqlの使用
今、私はSQLにはかなり新しく、知識を広げるために公正なビットを読んでいます。この研究の中で、私は多くのトピックに出くわしました。そこで、カーソルとパフォーマンスの問題について説明しました。
現在のSP(カーソル付き)は正常に動作しますが、カーソル(他のPOV)なしで自分のコードを使用しようとしています。
だから今私はこの小さなゴミコードに悩まされています。私はそれが私がそれを望むようにそれをすることは不可能だと思うが、ちょっと、私は正しいことを試すことができます。
エラー:サブクエリが1より大きい値を返しました。サブクエリは、次の時にこれが許可されていない=、=、<、...
コード:!
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));
これは私が持っている2つのマージ文の一つであり、これは小さいものです。
フィードバックは歓迎です!事前に
感謝:)
マージには欠陥が実装され、後に潜在的なデータ問題がある場合、デバッグには非常に困難です。私は決して誰もが私たちの生産データベースでそれを使用することを許可しません。更新ステートメントの後に挿入(注文は重要) – HLGEM
https://www.mssqltips.com/sqlservertip/3074/use-caution-with-sql-servers-merge-statement/ –