0

以前に同様の質問を投稿しましたが、十分な回答が得られないようです! もう投稿しなくて良かったらごめんなさい!

これは SQL Server 2008 を使用しています。invoice というテーブルがあります。

create table INVOICE(
INVOICE_ID numeric(5) PRIMARY KEY IDENTITY,
INVOICE_STATUS varchar(25) not null,
TRADER_STATUS varchar (25))

挿入が入力されたときにトリガーを作成したい。そして、invoice_status = 'pending' - trader_status が 'open' に更新 (トリガー) されます。挿入物が入っている場合。そして、invoice_status = 'overdue' - trader_status が 'blocked' に更新 (トリガー) されます。

私が持っているトリガーコード。

CREATE TRIGGER [dbo].[test] on [dbo].[invoice]
FOR INSERT, UPDATE
AS 
BEGIN

SET NOCOUNT ON;
declare @invoice_status varchar(25)
select @invoice_status = (select invoice_status from  inserted WHERE invoice_status = 'PENDING')
insert into invoice (trader_status) values ('OPEN')

select @invoice_status = (select invoice_status from  inserted WHERE invoice_status = 'OVERDUE')
insert into invoice (trader_status) values ('BLOCKED')

 END
 GO

どんな助けでも大歓迎です!

4

1 に答える 1

1
create trigger [dbo].[test] on [dbo].[invoice]
for insert
as
begin

update Invoice
  set Trader_Status = 'OPEN'
  where Invoice_Id in ( select Invoice_Id from inserted where Invoice_Status = 'PENDING' )

update Invoice
  set Trader_Status = 'BLOCKED'
  where Invoice_Id in ( select Invoice_Id from inserted where Invoice_Status = 'OVERDUE' )

end

これは、単一のステートメントによって挿入される複数の行を処理することに注意してください。

于 2012-11-26T21:41:02.767 に答える