0
我最近向我的Invoice
表添加了一個新的外鍵約束(ProjectID
),並且我試圖更新Invoice
表,以便外鍵與給定的記錄集。使用匹配記錄更新表的新添加的列SQL Server
使用以下查詢,我可以找到匹配的記錄。
SELECT
IV.InvoiceID, TA.ProjectID
FROM
Invoices IV
JOIN
TimeEntries TE on TE.InvoiceId = IV.InvoiceID
JOIN
Tasks TA ON TE.TaskID = TA.TaskID
我想正確的方法是使用遊標,並通過在Tasks
表中的所有記錄重複,但我不知道如何着手。
這是我到目前爲止有:提前
DECLARE @ForeignKey int
DECLARE C CURSOR FOR SELECT IV.InvoiceID, TA.ProjectID FROM Invoices IV
JOIN TimeEntries TE on TE.InvoiceId = IV.InvoiceID
JOIN Tasks TA ON TE.TaskID = TA.TaskID
OPEN C
FETCH NEXT FROM C INTO @ForeignKey
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE Invoices
SET ProjectID = @ForeignKey
WHERE InvoiceID = ??? (Need matching ID)
謝謝!
你應該從不認爲,「遊標是可能做到這一點的最好辦法。」 SQL Server的構建是爲了處理數據集,而不是遍歷數據。遊標是對程序員不斷要求的讓步,針對由於SQL實現方面的進步而不再是問題的某些問題的解決方案,以及處理**非常罕見的情況,其中基於集合的方法是不可能的。 –