Я написал скрипт против SQL 2008, который работал нормально:
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)
Я знаю, что это необходимо решить, сначала вставив данные в таблицу с автоматическим первичным ключом, а затем перенеся данные из одной таблицы в другую, я ищу лучшее решение "только для сценариев".
Спасибо
Lee