私が取り組んでいるデータベースには、次の挿入トリガーがあります。問題は、トリガーが複数行の挿入で機能しないことです。一度に複数の行を挿入しようとすると、次のメッセージが表示されます。
メッセージ 512、レベル 16、状態 1、プロシージャ _ti_UD06、行 8 サブクエリ
が複数の値を返しました。サブクエリが =、!=、<、<=、>、>= の後にある場合、またはサブクエリが式として使用されている場合、これは許可されません。問題は、複数の行が挿入されたときに複数の値を返す次のステートメントにあると思います。
この挿入トリガーを複数の行で機能させるにはどうすればよいですか?
IF(SELECT PROGRESS_RECID FROM inserted) IS NULL
PROGRESS_RECID
表にはとの 2 つの列がありますPROGRESS_RECID_IDENT_
。
はSQL ServerPROGRESS_RECID_IDENT_
の列だと思います。PROGRESS サーバーによって使用されますIdentity
。PROGRESS_RECID_INDENT
PROGRESS_RECID
新しいレコードが挿入されると、トリガーは が nullかどうかを確認し、それを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]