这是触发器:CREATE TRIGGER [Trigger1] ON dbo.T_CHECKSTORAGEREC 
INSTEAD OF  INSERT 
AS
   DECLARE @NEXTVALUE VARCHAR(10) 
   EXEC GETSEQ 'S_CHECKSTORAGEREC',@NextID=@NEXTVALUE OUT 
  SELECT *  INTO # FROM INSERTED
    UPDATE #  SET  CHECKSTORAGERECID=@NEXTVALUE
EXEC GETSEQ 'S_CHECKSTORAGEREC',@NextID=@NEXTVALUE OUT 
    INSERT T_CHECKSTORAGEREC   SELECT * FROM #下面是存储过程,读取ID值,然后将ID值加1。
CREATE PROCEDURE [dbo].[GetSeq] @TableName NVARCHAR(60),@NextID VARCHAR(10)
OUTPUT  AS
SET NOCOUNT ON
BEGIN TRAN
  UPDATE T_SEQUENCES SET NEXTVALUE=STR(CONVERT(BIGINT,NEXTVALUE)+1) WHERE TABLENAME=ltrim(rtrim(@TableName))
  SELECT @NextID=ltrim(rtrim(NEXTVALUE)) FROM T_SEQUENCES WHERE TABLENAME=ltrim(rtrim(@TableName))
COMMIT TRAN
RETURN
GO如果一条INSERT INTO 语句同时插入多条数据的话就出现问题了。如何解决呢?

解决方案 »

  1.   

    用个表变量CREATE TRIGGER [Trigger1] ON dbo.T_CHECKSTORAGEREC 
    INSTEAD OF  INSERT 
    AS
       DECLARE @NEXTVALUE VARCHAR(10) 
       EXEC GETSEQ 'S_CHECKSTORAGEREC',@NextID=@NEXTVALUE OUT 
       declare @t table(iddd int IDENTITY(0,1),id int)
       insert @t(id) select id from inserted
         SELECT *,IDENTITY(bigint,0,1) as idddd  INTO # FROM INSERTED    INSERT T_CHECKSTORAGEREC(CHECKSTORAGERECID,...)  SELECT CHECKSTORAGERECID=@NEXTVALUE+iddd,... FROM #
      

  2.   

    上面的错了CREATE TRIGGER [Trigger1] ON dbo.T_CHECKSTORAGEREC 
    INSTEAD OF  INSERT 
    AS
       DECLARE @NEXTVALUE VARCHAR(10) 
       EXEC GETSEQ 'S_CHECKSTORAGEREC',@NextID=@NEXTVALUE OUT   SELECT *,IDENTITY(bigint,0,1) as idddd  INTO # FROM INSERTED    INSERT T_CHECKSTORAGEREC(CHECKSTORAGERECID,...)  SELECT CHECKSTORAGERECID=@NEXTVALUE+iddd,... FROM #go--因为你用了临时表,所以没用表变量