Dav*_*.ca 2 sql sql-server sql-server-2005
我有一个表MyTable,其触发器定义如下:
ALTER TRIGGER [MyTableInsertDeleteUpdate]
ON [dbo].[MyTable]
AFTER INSERT,DELETE,UPDATE
AS
DECLARE @id int;
BEGIN
SELECT @id = ins.id FROM inserted ins;
IF (@id IS NOT NULL)
BEGIN
-- insert a new record to audit table
PRINT 'inserted/updated id: ' + CAST(@id AS VARCHAR);
END
END
Run Code Online (Sandbox Code Playgroud)
我意识到,如果像这样更新了多行,
UPDATE MyTable SET name = 'test rows' WHERE id in (1, 2, 3);
Run Code Online (Sandbox Code Playgroud)
只触发一次tigger,只更新[inserted]中的第一个.实际上,[inserted]可能有多行(在这种情况下,如果id 1,2,3存在,则为3行).换句话说,不会在每一行触发触发器.是对的吗?
我正在使用Microsoft SQL Server 2005.
是的,每个语句(不是每行一次)触发一次触发器,使您进行所订阅的更改.如果没有受影响的行,它甚至会触发.
http://msdn.microsoft.com/en-us/library/ms189799(SQL.90).aspx
| 归档时间: |
|
| 查看次数: |
4165 次 |
| 最近记录: |