Tengo una consulta donde necesito "por lotes" insertar filas en una tabla con una clave principal sin identidad.T-SQL, Insertar en con MAX() + 1 en subconsulta no incrementa, ¿alternativas?
--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
(ejemplo simplificado - por favor no comentar acerca de los posibles problemas de concurrencia :-))
El problema es que no se incrementa el PK "para cada" fila procesada, y yo obtener una violación de clave principal.
Sé cómo hacerlo con un cursor/while, pero me gustaría evitar eso, y resolverlo de una manera establecida, ¿si eso es posible?
(ejecuta SQL Server 2008 Standard)
¿Por qué no haces de la columna una columna de identidad? – Chandu
+1 @Cybernate: esta es una idea terrible y si te has tomado la molestia de buscar en SO, hay unas 20 preguntas similares a esta, cada una te dice por qué es una mala idea. – JNK
Resumen largo: crearía una identidad si pudiera :-). @JNK me molesté, pero es mi única opción, y quiero resolverlo de la mejor manera posible. También ten en cuenta que proporcioné un ejemplo simplificado. – KorsG