Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql server触发器帮助-相同的表更新_Sql_Sql Server 2008_Triggers - Fatal编程技术网

sql server触发器帮助-相同的表更新

sql server触发器帮助-相同的表更新,sql,sql-server-2008,triggers,Sql,Sql Server 2008,Triggers,我之前发布了一个类似的问题——但似乎没有得到足够长的回复!对不起,如果我不应该再次发布 这是使用SQLServer2008。我有一张叫做发票的桌子 create table INVOICE( INVOICE_ID numeric(5) PRIMARY KEY IDENTITY, INVOICE_STATUS varchar(25) not null, TRADER_STATUS varchar (25)) 我想在输入insert时创建一个触发器;发票状态='pending'-交易员状态更新为'

我之前发布了一个类似的问题——但似乎没有得到足够长的回复!对不起,如果我不应该再次发布

这是使用SQLServer2008。我有一张叫做发票的桌子

create table INVOICE(
INVOICE_ID numeric(5) PRIMARY KEY IDENTITY,
INVOICE_STATUS varchar(25) not null,
TRADER_STATUS varchar (25))
我想在输入insert时创建一个触发器;发票状态='pending'-交易员状态更新为'open'。插入时;发票状态=‘过期’——交易员状态更新为‘已冻结’

我的触发代码

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
非常感谢您的帮助

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

请注意,这将处理由一条语句插入的多行。

我将仅为初学者设置INSERT触发器…inserted和deleted是表,因此它们可以表示集合操作的结果。在假设触发器总是只包含一行的情况下设计触发器通常是一个糟糕的计划。如果您绝对确定不会有超过一行,那么请添加对行数的检查,并使用RaIsError明确通知稍后出现的人,他们试图执行不可接受的语句。如果选择Count*from inserted>1,则会出现错误“FooTable_Insert:最多只能处理一行”。、25、42以及日志