2013-04-28 122 views
1

我正在使用的数据库具有以下插入触发器。问题是触发器不适用于多行插入。当我尝试插入多个行时,我收到以下消息。T-SQL插入触发器

消息512,级别16,状态1,过程_ti_UD06,第8行
子查询返回大于1倍的值。当子查询 跟随=,!=,<,< =,>,> =或当子查询用作 表达式时,这是不允许的。我认为这个问题与下面的陈述 将插入多行时返回多个值。

如何使这个插入触发器工作多行?

IF(SELECT PROGRESS_RECID FROM inserted) IS NULL 

有在表2组的列,PROGRESS_RECIDPROGRESS_RECID_IDENT_

我认为PROGRESS_RECID_IDENT_是SQL Server的Identity列。 PROGRESS服务器使用PROGRESS_RECID_INDENT

如果插入新记录触发检查,看是否PROGRESS_RECID为空,将其设置为inserted.Identity

ALTER trigger [dbo].[_ti_UD06] ON [dbo].[UD06] for insert as 
begin 
if (select PROGRESS_RECID from inserted) is NULL 
    begin 
     update t set PROGRESS_RECID = i.IDENTITYCOL 
     from UD06 t JOIN INSERTED i ON 
     t.PROGRESS_RECID_IDENT_ = i.PROGRESS_RECID_IDENT_ 
     select convert (bigint, @@identity) 
    end 
end 

这里是表定义

CREATE TABLE [dbo].[UD06](
[Company] [nvarchar](8) NULL, 
[Key1] [nvarchar](50) NOT NULL, 
[Key2] [nvarchar](50) NULL, 
[Key3] [nvarchar](50) NULL, 
[Key5] [nvarchar](50) NULL, 
[Character01] [nvarchar](max) NULL, 
[Character02] [nvarchar](max) NULL, 
[Character03] [nvarchar](max) NULL, 
[Character04] [nvarchar](max) NULL, 
[Character05] [nvarchar](max) NULL, 
[Character06] [nvarchar](max) NULL, 
[Character07] [nvarchar](max) NULL, 
[Character08] [nvarchar](max) NULL, 
[Character09] [nvarchar](max) NULL, 
[Character10] [nvarchar](max) NULL, 
[SysRowID] [nvarchar](36) NULL, 
[SysRevID] [int] NULL, 
[BitFlag] [int] NULL, 
[GlobalUD06] [tinyint] NULL, 
[GlobalLock] [tinyint] NULL, 
[PROGRESS_RECID] [bigint] NULL, 
[PROGRESS_RECID_IDENT_] [bigint] IDENTITY(1,1) NOT NULL 
) ON [PRIMARY] 

回答

1

我想你”已经非常接近:

ALTER trigger [dbo].[_ti_UD06] ON [dbo].[UD06] for insert as 
begin 

    UPDATE t 
    SET PROGRESS_RECID = t.PROGRESS_RECID_IDENT_ --not "IDENTITYCOL" 
    FROM UD06 t 
    JOIN inserted i ON t.PROGRESS_RECID_IDENT_ = i.PROGRESS_RECID_IDENT_ 
    WHERE i.PROGRESS_RECID is Null 

    -- Not sure what this bit is for? I doubt it's a good idea though... 
    select convert (bigint, @@identity) 

end 
+0

我做了更改,我不再收到错误,但是插入后PROGRESS_RECID为空。 – Kevin 2013-04-28 22:28:43

+0

@Kevin我们需要查看表格定义以进一步了解。 – RBarryYoung 2013-04-28 22:32:03

+0

这是sthe表定义。 – Kevin 2013-04-28 22:39:10