元は、 "UPSERT"を達成するためにIF/ELSEを使用しましたが、MERGE
と私の問題MERGE
を使用すると、2つのソースを使用できないようです。ここで複数のソースを持つTSQL MERGE
はアップサートで私のオリジナルの試みです:
IF ((SELECT COUNT(CAST(StudentuserID AS int)) FROM HL_StudentAttendance WHERE StudentUserID=1)>0)
UPDATE HL_StudentAttendance
SET
CID = CAST('[querystring:CID]' AS int),
CalendarEventID = CAST('[querystring:CEID]' AS int),
StudentUserID = CAST('[StudentUserID]' AS int),
Attendance = '[Attendance]'
ELSE
INSERT INTO HL_StudentAttendance
(CID,CalendarEventID,StudentUserID,Attendance)
VALUES
(CAST('[querystring:CID]' AS int), CAST('[querystring:CEID]' AS int), CAST('[StudentsUserID]' AS int),'[Attendance]')
IF文の結果は8
であってもそう8>0
それは私のif/elseロジックが欠落している場合、それは常にわからない挿入を実行している私の更新を実行する必要があります何か。ここで
MERGE
MERGE
HL_StudentAttendance AS target
USING
HL_CourseRegistrations AS source
ON
target.StudentUserID = source.UserID
AND source.
WHEN MATCHED THEN
UPDATE SET
Attendance = '[Attendance]'
WHEN NOT MATCHED THEN
INSERT (CID, CalendarEventID, StudentUserID, Attendance) VALUES ('[querystring:CID]', '[querystring:CEID]', '[UserID]', '[Attendance]')
;
との試みである、ここで私の問題は、私がCalendarEventID
され、追加のソースアイテムをつかむために使用する必要があり、私のテーブルHL_CourseEvents
内のデータが別の方法MERGE
作品が、挿入がにエントリが重複しているということです私のHL_StudentAttendance
にはパラメータがありませんCalendarEventID
何か提案がありがとうございます。
UPDATE
次のクエリは何も出席フィールドに変更はなく、正しく更新されている場合、それは新しいレコードを挿入だこと以外は、作業を行います。私の更新のWHERE句はそこにないので、私は疑う。実行エラーが発生して追加しようとしました。
MERGE HL_StudentAttendance
USING
(
SELECT cr.CID, ce.CalendarEventID, cr.UserID FROM HL_CourseRegistrations cr
JOIN HL_CalendarEvents ce
ON ce.CID = cr.CID
) tmpTable
ON
HL_StudentAttendance.StudentUserID = tmpTable.UserID
AND HL_StudentAttendance.CalendarEventID = tmpTable.CalendarEventID
WHEN MATCHED THEN
UPDATE
SET
Attendance = 'Attended Late'
WHEN NOT MATCHED THEN
INSERT (CID,CalendarEventID,StudentUserID,Attendance) VALUES ('1','1','1','555')
;
クエリの実行結果が2回表示されます。私はそれを実行し続けると、更新の代わりに常に多くを挿入します:
ID CID CalendarEventID StudentUserID Attendance
1 1 1 1 Attended Late
2 1 1 1 Attended Late
3 1 1 1 Attended Late
4 1 1 1 Attended Late
5 1 1 1 Attended Late
6 1 1 1 555
7 1 1 1 555
8 1 1 1 555
9 1 1 1 555
ありがとうございました。 「出席」の設定は、ユーザが定義した手動プロセスである。私の問題は、このクエリで更新する 'UserID'を指定することができないということです。 – UserSN
5つのレコードを初めて挿入するクエリを実行するときに、データのマッチングのどこかに問題があります。私には5人の学生がいます。私はそれを2回目に実行し、私のレコードを1つ更新し、この時点で挿入する代わりに5つの新しいレコードを挿入して更新する必要があります。 – UserSN
Aha!プロシージャでそれを使用していると仮定すると、私のプレゼンテーションのプレゼンテーション[プレゼンテーション](https://github.com/KELightsey/chamomile/blob/master/presentation/merge.sql)にあるようなものを使用します([flower]、[color]))として((値(@flower、 @color)を使用して)パラメータを使用して[マージ]します。昼食はちょうど私たちのオフィスに到着しました。その後もヒントが必要な場合は、私は更新することができます。 –