1
我寫了針對2008年的SQL腳本,其工作得很好:T-SQL多個插入與計算的主鍵
INSERT INTO ITEM_TABLE VALUES((SELECT ISNULL(MAX(PK_COLUMN),0) + 1
FROM ITEM_TABLE), 'Data 1', @HeadSeq)
INSERT INTO ITEM_TABLE VALUES((SELECT ISNULL(MAX(PK_COLUMN),0) + 1
FROM ITEM_TABLE), 'Data 2', @HeadSeq)
...
INSERT INTO ITEM_TABLE VALUES((SELECT ISNULL(MAX(PK_COLUMN),0) + 1
FROM ITEM_TABLE), 'Data 73', @HeadSeq)
然而,在2005年,它給這個錯誤的每一行:
子查詢是不在這方面允許。只有標量表達式是允許的。
有沒有更好的方法來解決這個問題,而不是做下面的事情? (這將將使開槽一個在中間困難)
DECLARE @SequenceCounter INT
SELECT @SequenceCounter = ISNULL(MAX(PK_COLUMN),0) FROM ITEM_TABLE
INSERT INTO ITEM_TABLE VALUES(@SequenceCounter + 1, 'Data 1', @HeadSeq)
INSERT INTO ITEM_TABLE VALUES(@SequenceCounter + 2, 'Data 2', @HeadSeq)
...
INSERT INTO ITEM_TABLE VALUES(@SequenceCounter + 73, 'Data 73', @HeadSeq)
我知道這應該通過首先將數據插入到一個表的自動主鍵來解決,然後從一個表的數據傳送到所述其他,我正在尋找最好的「腳本專用」解決方案。
感謝
李
我已經在每個插入自己執行@SequenceCounter + 1之前也考慮過,然後只使用@SequenceCounter,我正在尋找更優雅的解決方案 - 如果有的話! – Lee
你提出的解決方案有點危險,除非你手動發佈表鎖 - 當你執行語句73時,很可能有人在兩者之間插入了一些東西,並且你會有一個雙鍵(或者一個錯誤,如果你有約束在關鍵列上) – vstrien
是的,在這方面,第二種解決方案是危險的,它適用於我,因爲目前數據庫尚未使用,但我正在尋找一種更好的解決方案,用於將來針對SQL 2005。 – Lee