我目前正在INSERT使用兩步程序創建一個陳述句,我試圖將其濃縮為一個步驟。
現在我有一個乏味但有效的程序:
首先,我運行此查詢以獲取下一個SeriesID:
SELECT MAX(serialNo) 1 FROM Table1
假設它回傳 54。然后,我手動將 54 輸入到INSERT/SELECT:
INSERT INTO Table1
SELECT 54, NULL, 1, 'NEW', GETDATE(), Table2.TrackingID
FROM Table2
LEFT JOIN Table3 ON Table3.pid = Table2.pid
LEFT JOIN Table1 ON Table1.CustID = Table1.CustID
WHERE Table3.packageNumber = '123456'
這行得通,但是每次都必須進行第一次查詢然后手動更改序列號是非常煩人的。所以我試圖將查詢合并到 中INSERT,但我沒有運氣:
INSERT INTO Table1
SELECT (MAX(serialNo) 1), NULL, 1, 'NEW', GETDATE(), Table2.TrackingID
FROM Table2
LEFT JOIN Table3 ON Table3.pid = Table2.pid
LEFT JOIN Table1 ON Table1.CustID = Table1.CustID
GROUP BY Table2.TrackingID, Table3.packageNumber
HAVING Table3.packageNumber = '123456'
從技術上講,這不會引發錯誤,但不是像我希望的那樣用 54 插入第一列,而是用 NULL 插入它。
預期結果:
54|NULL|1|NEW|2022-06-10|98765
實際結果:
NULL|NULL|1|NEW|2022-06-10|98765
如何從 Table1 中獲取 MAX 序列號,以便MAX(serialNO) 1在下一個條目中用于序列號?
uj5u.com熱心網友回復:
我會考慮為此使用一個序列,但是如果您想按照自己的方式進行操作,則需要將完整的子查詢放在您的SELECT:
INSERT INTO Table1
SELECT (select MAX(serialNo) 1 from Table1),NULL,1,'NEW',GETDATE(),Table2.TrackingID
from Table2
left join Table3 on Table3.pid = Table2
left join Table1 on Table1.CustID = Table1.CustID
GROUP BY Table2.TrackingID, Table3.packageNumber
HAVING Table3.packageNumber = '123456'
當您只有MAX(serialNo)在完成連接和條件后獲得最大值時,這與整個表中的最大值不同。
我建議 a 的原因sequence是為了避免潛在的并發問題。如果同時運行多個插入,它們可能都回傳相同的內容max并發生沖突。即使您知道目前不可能,但它是一種更安全的設計,可以避免潛在的并發問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/489860.html
上一篇:使用更新恢復僅驗證回圈
