我使用带有而不是插入触发器的表时遇到问题.
我创建的表包含一个标识列.我需要在此表上使用而不是插入触发器.我还需要在触发器中查看新插入的标识的值,这需要在触发器中使用OUTPUT/INTO.问题是执行INSERT的客户端无法看到插入的值.
例如,我创建了一个简单的表:
CREATE TABLE [MyTable](
[MyID] [int] IDENTITY(1,1) NOT NULL,
[MyBit] [bit] NOT NULL,
CONSTRAINT [PK_MyTable_MyID] PRIMARY KEY NONCLUSTERED
(
[MyID] ASC
))
Run Code Online (Sandbox Code Playgroud)
接下来我创建一个简单而不是触发器:
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;
Run Code Online (Sandbox Code Playgroud)
最后,我尝试执行插入并检索插入的值:
DECLARE @tbl TABLE (myID INT)
insert into MyTable
(MyBit)
OUTPUT inserted.MyID
INTO @tbl
VALUES (1) …Run Code Online (Sandbox Code Playgroud)