ALTER TRIGGER [dbo].[TR_O_SALESMAN_INS]
ON [dbo].[O_SALESMAN]
AFTER INSERT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here
DECLARE @SLSMAN_CD NVARCHAR(20)
DECLARE @SLSMAN_NAME NVARCHAR(20)
SELECT @SLSMAN_CD = SLSMAN_CD,@SLSMAN_NAME=SLSMAN_NAME
FROM INSERTED
IF NOT EXISTS(SELECT * FROM O_SALESMAN_USER WHERE SLSMAN_CD = @SLSMAN_CD)
BEGIN
INSERT INTO O_SALESMAN_USER(SLSMAN_CD, PASSWORD, USER_CD)
VALUES(@SLSMAN_CD, @SLSMAN_CD,@SLSMAN_NAME )
END
END
这是为表(O_SALESMAN)
编写的触发器,用于从中获取几列并将其插入另一个表(O_SALESMAN_USER)
。目前,批量数据通过存储过程插入到 O_SALESMAN
表中,其中触发器仅被触发一次,并且 O_SALESMAN_USER
每次存储时仅插入一条记录程序正在执行,我希望触发器在插入 O_SALESMAN
的每条记录之后运行,以便两个表应该具有相同的计数,但这种情况不会发生。所以请让我知道可以修改哪些内容在这个Trigger中实现同样的......
最佳答案
您可以按如下方式使用光标:
create trigger trg_insertstuff
on [O_SALESMAN]
after insert
as
DECLARE @SLSMAN_CD NVARCHAR(20)
DECLARE @SLSMAN_NAME NVARCHAR(20)
declare db_cursor CURSOR FOR
SELECT SLSMAN_CD, SLSMAN_NAME
from inserted
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @SLSMAN_CD , @SLSMAN_NAME
WHILE @@FETCH_STATUS = 0
BEGIN
IF NOT EXISTS(SELECT * FROM O_SALESMAN_USER WHERE SLSMAN_CD = @SLSMAN_CD)
BEGIN
INSERT INTO O_SALESMAN_USER(SLSMAN_CD, PASSWORD, USER_CD)
VALUES(@SLSMAN_CD, @SLSMAN_CD,@SLSMAN_NAME )
END
FETCH NEXT FROM db_cursor INTO @SLSMAN_CD , @SLSMAN_NAME
end
CLOSE db_cursor
DEALLOCATE db_cursor
关于sql-server - 用于批量插入的触发触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2742745/