DECLARE @tag VARCHAR(MAX)
DECLARE @TagID as INT;
DECLARE tag_cursor CURSOR
FOR
SELECT tagname FROM #temptag
FOR READ ONLY
OPEN tag_cursor
FETCH NEXT FROM tag_cursor INTO @tag
WHILE @@FETCH_STATUS = 0
BEGIN
IF EXISTS (SELECT * FROM Tag WHERE TagName=@tag)
BEGIN
SELECT @TagID = TagID FROM Tag WHERE TagName = @tag
Insert into NoteTags(NoteID,TagID) values (@NoteID,@TagID)
END
ELSE
BEGIN
INSERT INTO Tag
SELECT @tag FROM #temptag
SELECT @TagID = SCOPE_IDENTITY();
Insert into NoteTags(NoteID,TagID) values (@NoteID,@TagID)
END
FETCH NEXT FROM tag_cursor INTO @tag
END
CLOSE tag_cursor
DEALLOCATE tag_cursor
XML を使用してパラメーターをプロシージャーに渡しています。一時テーブルを作成し、XML のすべての値をそこに格納しました。そして、値がテーブルに既に存在するかどうかを確認する Cursor を作成しました。
値が利用できない場合、レコードが挿入されます。
問題: テーブルに存在しない IND、USA などの 2 つの値を XML から送信すると、重複したレコードがテーブルに挿入されます。
自分のコードでどのような間違いを犯したか誰にもわかりますか?
修正後..
BEGIN
INSERT INTO Tag(TagName) values(@tag);
SELECT @TagID = IDENT_CURRENT('Tag');
Insert into NoteTags(NoteID,TagID) values (@NoteID,@TagID)
END