0

2つのテーブル内で一致するものを見つけようとしています。最初に電話番号を比較し、次に姓などを比較します。一致するものを新しいテーブルに挿入します。

私の質問は、SQLServerまたは.netプログラムで直接実行した方が、より高速で優れているかどうかです。

SQLの方が優れている場合は、助けが必要です。

そのレコードが一致テーブルに存在するかどうかを確認したいのですが、存在する場合は、このレコードのみを変更する必要があります。他の一致があることを指定します。

一致のタイプごとに個別の挿入および変更クエリを実行できます。もっといい方法があるのか​​しら。

マージを試しましたが、挿入は機能しましたが、変更するとエラーが発生します。以下を参照してください。

MERGE Matches AS M
USING (SELECT DOE.REG, sl.id FROM DOE INNER JOIN SL ON DOE.TEL = sl.phone) AS DOE
On M.doeid = DOE.reg
WHEN MATCHED THEN 
UPDATE SET m.Phonematch = 1, datemodified = getdate()
WHEN NOT MATCHED THEN
INSERT(DoeID, SatmarID, PhoneMatch , Verified, DateCreated)
VALUES(DOE.REG, id, 1, (SELECT ID FROM MatchStatus where Status = 'Not Verified'), GETDATE());

エラー:

Msg 8672, Level 16, State 1, Line 1
The MERGE statement attempted to UPDATE or DELETE the same row more than once. This happens when a target row matches more than one source row. A MERGE statement cannot UPDATE/DELETE the same row of the target table multiple times. Refine the ON clause to ensure a target row matches at most one source row, or use the GROUP BY clause to group the source rows.
4

1 に答える 1

2

あなたはマージを探しています

例を使って説明します

サンプルDDL

CREATE TABLE Employee
(
   EmployeeID INTEGER PRIMARY KEY,
   EmployeeName VARCHAR(15)
)


CREATE TABLE EmployeeSalary
(
    EmployeeID INTEGER ,
    EmployeeSalary INTEGER
)

従業員のサンプルDML

INSERT INTO Employee
VALUES(1,'SMITH')
INSERT INTO Employee
VALUES(2,'ALLEN')
INSERT INTO Employee
VALUES(3,'JONES')
INSERT INTO Employee
VALUES(4,'MARTIN')
INSERT INTO Employee
VALUES(5,'JAMES')

EmployeeDetailsのサンプルDML

INSERT INTO EmployeeSalary
VALUES(1,23000)
INSERT INTO EmployeeSalary
VALUES(2,25500)
INSERT INTO EmployeeSalary
VALUES(3,20000)

クエリのマージ

MERGE EmployeeSalary AS stm
USING (SELECT EmployeeID,EmployeeName FROM Employee) AS sd
ON stm.EmployeeID = sd.EmployeeID
WHEN MATCHED THEN UPDATE SET stm.EmployeeSalary = stm.EmployeeSalary + 12
WHEN NOT MATCHED THEN
INSERT(EmployeeID,EmployeeSalary)
VALUES(sd.EmployeeID,25000);

参考文献

最初のリファレンス

2番目のリファレンス

3番目のリファレンス

4番目のリファレンス

于 2012-07-15T06:57:47.560 に答える