编辑:我的问题是因为在而不是关闭插入触发器中有一个插入语句,那么它应该从而不是关闭插入触发器内部调用插入触发器,并且应该避免在测试表中插入行。我的观察是,插入触发器正在触发,但在关闭触发器之后,它已经在可测试中插入了新行。因为插入触发器引发错误,但关闭触发器已经在测试表中插入了一行。为什么不从内部调用插入触发器而不是从插入触发器中调用?
我在名为 TestTable 的表上有两个触发器。一个是代替插入触发器,第二个是插入触发器后。首先而不是插入触发器将触发,然后插入触发器。它在TestTable 和CopyTable 中插入新行,但不在AuditTable 中插入新行。
我的问题是为什么不触发插入触发器而不是触发器?它应该是因为它也在其中使用插入查询。为什么 TestTable 得到新插入的行?
我的表脚本
CREATE TABLE [dbo].[TestTable](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) NULL,
[Age] [int] NULL,
[DOB] [date] NULL,
[Address] [nvarchar](50) NULL,
CONSTRAINT [PK_TestTable] PRIMARY KEY CLUSTERED
Run Code Online (Sandbox Code Playgroud)
我的 SQL 查询:
Insert into dbo.TestTable values ('Waleed',24,'10-2-2015','Lahore');
Run Code Online (Sandbox Code Playgroud)
我的而不是插入触发器是:
ALTER TRIGGER [dbo].[utInsteadoff]
ON [dbo].[TestTable]
Instead of Insert
AS
Declare @Name as nvarchar(50)
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
Insert into …
Run Code Online (Sandbox Code Playgroud)