T-SQL, Вставить в с помощью MAX () + 1 в подзапросе не увеличивается, альтернативы?

У меня есть запрос, в котором мне нужно «пакетно» вставить строки в таблицу с первичным ключом без идентификации.

--TableA
--PK int (Primary key, no-identity)
--CustNo int
INSERT INTO TableA (PK,CustNo)
  SELECT (SELECT MAX(PK)+1 AS PK FROM TableA), CustNo
  FROM Customers

(упрощенный пример - пожалуйста, не комментарий о возможных проблемах параллелизма: -))

Проблема в том, что он не увеличивает PK "для каждой" обработанной строки, и я получаю нарушение первичного ключа.

Я знаю, как это сделать с помощью цикла «курсор / пока», но я бы хотел избежать этого и решить его на основе наборов, если это вообще возможно?

(работает SQL Server 2008 Standard )

13
задан Pratik 9 August 2011 в 10:33
поделиться