このカーソルの変数 @NextURLId が更新されない理由がわかりません。ここにコードがあります
DECLARE @NextURLId INT = 1
DECLARE @varContact_Id INT
DECLARE GetURL_Cursor CURSOR FOR
SELECT DISTINCT(contact_id)
FROM obp.Contacts
OPEN GetURL_Cursor
FETCH NEXT FROM GetURL_Cursor INTO @varContact_id
WHILE @@FETCH_STATUS = 0
BEGIN
-- Available URLs have the used value as NULL. Used has value of 1.
SET @NextURLId = (SELECT MIN(id) FROM obp.URL WHERE used IS NULL)
UPDATE obp.Contacts SET URL = (
SELECT url from obp.URL WHERE id = @NextURLId)
UPDATE obp.URL SET
used = 1,
contact_id = @varContact_Id,
date = GETDATE()
WHERE id = @NextURLId
FETCH NEXT FROM GetURL_Cursor INTO @varContact_id
END;
CLOSE GetURL_Cursor
DEALLOCATE GetURL_Cursor
このコードは、テーブル (obp.URL) から一意の URL を取得し、その URL を Contacts テーブルに入力してから、URL が使用されたことを示すように URL を更新することになっています。URL テーブルが 'used = 1' で更新された後、コードの次の繰り返しでクエリを実行すると、新しい URLId が取得されるように思えます。
ただし、このコードを実行すると、毎回同じ URL を取得します。明らかな何かが欠けていることは間違いありませんが、それを指摘するには助けが必要です。
余談ですが、これに対するセットベースの解決策があれば、喜んでお聞きします。
ティア