Subject: INSERT ... OUTPUT INTO in INSTEAD OF TRIGGER
Posted By: kpkirilov Post Date: 7/25/2008 1:03:39 AM
Hello.
I have the following problem with the use of INSERT ... OUTPUT INTO in INSTEAD OF TRIGGER.
Example:

CREATE TABLE T1(
  T1_ID INT IDENTITY(1, 1),
  Name VARCHAR(100),
  
  CONSTRAINT PK_T1_ID PRIMARY KEY (T1_ID)
);
GO

CREATE TRIGGER TRG_INSD_INS_T1
ON T1
INSTEAD OF INSERT
AS
  INSERT INTO T1(Name)
  SELECT Name FROM Inserted;
GO

CREATE TABLE T2(
  T2_ID INT,
  
  CONSTRAINT PK_T2_ID PRIMARY KEY (T2_ID),
  CONSTRAINT FK_T2_ID FOREIGN KEY (T2_ID) REFERENCES T1(T1_ID)
);
GO

CREATE VIEW VW_T(T1_ID, Name, T2_ID)
AS
SELECT T1.T1_ID, T1.Name, T2.T2_ID FROM T2
LEFT JOIN T1 ON T1.T1_ID = T2.T2_ID;
GO

CREATE TRIGGER TRG_INSD_INS_VW_T
ON VW_T
INSTEAD OF INSERT
AS
  IF @@ROWCOUNT = 0
    RETURN;
  SET NOCOUNT ON;

  DECLARE @tb TABLE(Id INT);

  INSERT INTO T1(Name)
  OUTPUT INSERTED.T1_ID INTO @tb
  SELECT Name FROM Inserted;
  SELECT @@ROWCOUNT;

  SELECT * FROM @tb;

  --slq code;
GO

Having run sql clause: INSERT INTO VW_T(Name, T2_ID) VALUES ('Test', 1)
The result is 0 instead of 1 (SELECT * FROM @tb in trigger of table T2 return one record).

When removed trigger TRG_INSD_INS_T1 from table T1 everything is working normally.
That is, in the performance of INSERT INTO VW_T(Name, T2_ID) VALUES ('Test', 1) returns the value of IDENTITY column T1_ID.

    
What is due this? How can otherwise choose their problem: get the value of identity column in INSERT.

Reply By: Peso Reply Date: 7/31/2008 4:21:18 PM
http://weblogs.sqlteam.com/peterl/archive/2007/10/03/New-OUTPUT-operator.aspx


Reply By: kpkirilov Reply Date: 8/5/2008 1:13:41 AM
quote:
Originally posted by Peso

http://weblogs.sqlteam.com/peterl/archive/2007/10/03/New-OUTPUT-operator.aspx






I know how to use OUTPUT INTO. Link you gave me no respect in the question.
I understand why this is obtained, a problem. OUTPUT INTO be taken as SCOPE_IDENTITY, that is, relates to the current request.


Go to topic 73240

Return to index page 1