当我使用insert into select时触发器只触发一个

时间:2013-05-14 06:23:37

标签: tsql

CREATE TRIGGER tg_bpb_cons_no ON dbo.t_bpb_cons
FOR INSERT
AS
/*
fungsi  : membuat document bon permintaan barang maintenance number secara otomatis`
author  : ryan
*/
declare @new_doc_no varchar(20)
declare @doc_no varchar(20)
--declare @doc_no bigint
--update doc no
SELECT @doc_no = max(cast(substring(doc_no,9,13) as integer)) from t_bpb_cons
IF (@doc_no IS NULL)
BEGIN
set @doc_no = 0
END
PRINT @DOC_NO
SELECT @new_doc_no = cast(@doc_no+1 as varchar(20))
SELECT @new_doc_no = LEFT('BPB/CON/',8+len(@new_doc_no))+@new_doc_no
UPDATE t_bpb_cons SET doc_no=@new_doc_no WHERE [ID]=(SELECT MAX([ID]) AS id from t_bpb_cons)

它插入单个记录时工作正常,但我使用Insert from table select value from Another Table插入多个记录它只影响最后一条记录... 为什么??

1 个答案:

答案 0 :(得分:0)

插入语句(甚至有多行)视为单个操作,您必须自己处理触发器代码中插入的值。

试试这个:

CREATE TRIGGER tg_bpb_cons_no ON dbo.t_bpb_cons
FOR INSERT
AS
/*
fungsi  : membuat document bon permintaan barang maintenance number secara otomatis`
author  : ryan
*/
declare @new_doc_no varchar(20)
declare @doc_no int
declare @row_inserted int

select @row_inserted = count(*) from inserted
--declare @doc_no bigint
--update doc no
SELECT @doc_no = max(cast(substring(doc_no,9,13) as integer)) from t_bpb_cons
IF (@doc_no IS NULL)
BEGIN
set @doc_no = 0
END
WHILE @doc_no < @doc_no + @row_inserted
BEGIN
    PRINT @DOC_NO
    SELECT @new_doc_no = cast(@doc_no+1 as varchar(20))
    SELECT @new_doc_no = LEFT('BPB/CON/',8+len(@new_doc_no))+@new_doc_no
    UPDATE t_bpb_cons SET doc_no=@new_doc_no WHERE [ID] = (SELECT MAX([ID]) AS id from inserted)
    SET @doc_no = @doc_no + 1
END