J'ai un problème pour utiliser une table avec un trigger à la place de insert.L'utilisation de OUTPUT/INTO à la place du déclencheur d'insertion invalide la table 'insérée'
La table que j'ai créée contient une colonne d'identité. J'ai besoin d'utiliser un trigger à la place de insert sur cette table. J'ai également besoin de voir la valeur de l'identité nouvellement insérée à partir de mon déclencheur qui nécessite l'utilisation de OUTPUT/INTO dans le déclencheur. Le problème est alors que les clients qui exécutent INSERT ne peuvent pas voir les valeurs insérées.
Par exemple, je crée une table simple:
CREATE TABLE [MyTable](
[MyID] [int] IDENTITY(1,1) NOT NULL,
[MyBit] [bit] NOT NULL,
CONSTRAINT [PK_MyTable_MyID] PRIMARY KEY NONCLUSTERED
(
[MyID] ASC
))
Ensuite, je crée simple au lieu de déclenchement:
create trigger [trMyTableInsert] on [MyTable] instead of insert
as
BEGIN
DECLARE @InsertedRows table(MyID int,
MyBit bit);
INSERT INTO [MyTable]
([MyBit])
OUTPUT inserted.MyID,
inserted.MyBit
INTO @InsertedRows
SELECT inserted.MyBit
FROM inserted;
-- LOGIC NOT SHOWN HERE THAT USES @InsertedRows
END;
Enfin, je tente d'effectuer une insertion et récupérer les valeurs insérées:
DECLARE @tbl TABLE (myID INT)
insert into MyTable
(MyBit)
OUTPUT inserted.MyID
INTO @tbl
VALUES (1)
SELECT * from @tbl
Le problème est tout ce que je reçois jamais est zéro. Je peux voir que la rangée a été correctement insérée dans la table. Je sais aussi que si je supprime le OUTPUT/INTO de la gâchette, ce problème disparaît.
Des pensées sur ce que je fais de mal? Ou est-ce que je veux faire des choses impossibles?
Merci.