Tengo el siguiente código en un procedimiento almacenado.Create PK para #temp table failed cuando el script se ejecuta en paralelo
....
select ... into #temp from ....
alter table #temp add constraint PK_mytemp13 primary key (....)
....
Y recibiré el siguiente mensaje de error de vez en cuando si el procedimiento almacenado se ejecuta en paralelo.
Ya existe un objeto llamado 'PK_perf322dsf' en la base de datos. No se pudo crear una restricción. Ver errores previos.
Creo que se puede evitar con los siguientes enfoques. ¿Hay alguna otra solución más elegante?
Primero crea una tabla de temperatura con la clave principal. Luego inserta las filas.
create table #temp (... primary key (....))
Cree PK dinámicamente con id de sesión dinámicamente.
declare @s varchar(500) = 'alter table #temp add constraint PK_temp' + @@spid + ' primary key (....)
Este error tiene que ver con la creación de una tabla temporal local, crear una clave principal con nombre en un bloque de código y tener más de una conexión llamando a ese bloque de código. SQL Server no permite 2 PK con el mismo nombre, incluso en tablas temporales locales. – CDC