2011-11-25 108 views
0

我有这样SQL Server 2005的触发

 
table-1 
Project-name  proj-status 
-----------   ----------- 
pro1    progress 
pro2    progress 
pro3    progress 

表如果我更新,该凸出状态为已完成

 

Project-name  proj-status 
-----------   ----------- 
pro1    progress 
pro2    completed 
pro3    progress 

那么就应该插入到表2

 
table-2 
completed prject 
---------------- 
pro2 

我想用trigers做这个!请帮帮我。

+0

我不会做你的为你工作。请记住,并非所有版本的SQL Server支持触发器(标准版和快速版都不) – SJuan76

+1

@ SJuan76 - 请原谅您的赦免? Standard和Express当然支持触发器。 –

+1

为什么不只是将'table1'过滤到已完成的那些行的视图 - 它总是正确的,而且您不必编写代码来更新它。 –

回答

0

在下面的例子中创建一个更新触发器这样的,我有一个emp表时,其员工被更新为“已完成”该员工ID被复制到表EMP1

ALTER TRIGGER [dbo].[updtrigg] 
ON [dbo].[emp] 
AFTER UPDATE 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    declare @emp as varchar(50) 
    declare @empid as varchar(5) 
    SELECT @empid = empid, @emp = employee FROM inserted 
    if(@emp = 'completed') 
    begin 
     INSERT into emp1 (employee) values(@empid) 
    end 
END 
+0

你的触发器假定在'inserted'中只有一行存在。这通常不是一个安全的假设。 –

+0

单个更新的问题,因此答案。如果有批量更新,那么触发器就不是要走的路,因为它会导致不必要的锁,我会这样回答。 – lloydom

+0

对于多行插入而言损坏的触发器是一个中断的触发器。此外,OP刚刚声明“如果我将项目状态更新为完成” - 他们没有提及该更新是否适用于单行或多行的单个声明。 –