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 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 into tbl select tblvalue from AnotherTable 插入多条记录它只影响最后一条记录......为什么?

4

1 回答 1

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
于 2013-05-14T14:24:39.673 回答