Buenos días,
Me he encontrado con el siguiente comportamiento extraño, por lo menos para
mí, de la función SCOPE_IDENTITY():
- Si una tabla tiene un campo IDENTITY, pero tiene un TRIGGER ' INSTEAD OF
INSERT ', aún cuando en el trigger
se termine realizando el INSERT sobre la misma tabla, SCOPE_IDENTITY()
devuelve NULL. No así, tanto @@IDENTITY como IDENT_CURREN('TABLA').
- Tengo una aplicación donde el valor IDENTITY es usado como parte de tablas
dependientes. Con el objetivo de asegurarme obtener un valor correcto estaba
usando SCOPE_IDENTITY(), para evitar que TRIGGERS lanzados
por INSERT provocasen una devolución incorrecta para @@IDENTITY. Por otra
parte, usar IDENT_CURREN('TABLA') me podía dar problemas de concurrencia.
- En una tabla que tenía con esta aplicación se le ha añadido un TRIGGER '
INSTEAD OF INSERT ' para efectuar
unas verificaciones previas que se han añadido a la funcionalidad. Pues
bien, desde ese momento, se obtienen NULL para SCOPE_IDENTITY() en esa
tabla. Deshabilitando el TRIGGER todo funciona como antes.
- El script del pie creo que visualiza lo que he querido decir.
Agradecería un comentario. Muchas gracias anticipadas.
BARCELONA
-
CREATE TABLE
[Tb_TABLA] (
[NUMERO] int,
[ID_TABLA] int IDENTITY
PRIMARY KEY CLUSTERED
(
[NUMERO]
) )
GO
CREATE TRIGGER Tr_TBLA_INS_OF_INS
ON Tb_TABLA
INSTEAD OF INSERT
AS
begin
SET NOCOUNT ON
INSERT INTO dbo.Tb_TABLA
([NUMERO])
SELECT
[NUMERO]
FROM INSERTED
SET NOCOUNT OFF
RETURN
end
GO
INSERT INTO dbo.Tb_TABLA
(NUMERO)
VALUES (1)
select SCOPE_IDENTITY()
select @@IDENTITY
select IDENT_CURRENT('Tb_TABLA')
GO
ALTER TABLE dbo.Tb_TABLA
DISABLE TRIGGER Tr_TBLA_INS_OF_INS
GO
INSERT INTO dbo.Tb_TABLA
(NUMERO)
VALUES (2)
select SCOPE_IDENTITY()
select @@IDENTITY
select IDENT_CURRENT('Tb_TABLA')
GO
-
-
Leer las respuestas