2017-07-18 185 views
0

我之前没有使用过触发器,所以这是一个'工作'第一次刺我需要实现的东西。 一旦我在VCODE字段中输入值'V'或'AV',触发器会填充VSYS,SITE_CODE,VAREA &所需的值,然后将这些值连接到ASSET_TAG字段。更新触发器和连接之后

我不认为这是执行此操作的最有效方式,那么有人可能会在SQL域中看到我的混乱脚本,并建议最有效的方法来实现相同的结果。

感谢

Trigger [dbo].[trValve]  
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
Create trigger [dbo].[trValve] on [dbo].[Valve] 
after update 
as 

Begin 
set nocount on; 
update Valve Set VSYS = 'VLV' 
from Valve t 
inner join inserted i on t.pkID = i.pkID 
and i.VCODE='V' or 
i.VCODE = 'AV' 

Begin 
set nocount on; 
update Valve 
Set SITE_CODE = '00123' 
from Valve t 
inner join inserted i on t.pkID = i.pkID 
and i.VCODE='V' or 
i.VCODE = 'AV' 

Begin 
set nocount on; 
update Valve 
Set VAREA = 'INL' 
from Valve t 
inner join inserted i on t.pkID = i.pkID 
and i.VCODE='V' or 
i.VCODE = 'AV' 

Begin 
set nocount on; 
update VALVE 
SET ASSET_TAG = CONCAT(Valve.SITE_CODE,'-',Valve.VAREA,'-', valve.VSYS,'-',Cast (pkID As Varchar(50))); 


End 
End 
End 
End 
End 
+0

也是我应包括在原岗位一两件事,我有现有的记载,被添加到项目的另一个版本的Valve表中,因此VCODE字段在创建此触发器之前已填充,是否有一种方法可以让我更新此触发器以便在我的其他项目阀表上回顾填充记录集? –

回答

0

您可以通过结合你的第一个3 SET语句凝结事情有点:

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
CREATE TRIGGER [dbo].[trValve] ON [dbo].[Valve] 
AFTER UPDATE 
AS 
BEGIN 
    SET NOCOUNT ON; 

    UPDATE Valve 
    SET VSYS = 'VLV', 
    SITE_CODE = '00123', 
    VAREA = 'INL' 
    FROM Valve t 
    INNER JOIN inserted i ON t.pkID = i.pkID 
    WHERE i.VCODE = 'V' 
    OR i.VCODE = 'AV' 

BEGIN 
    SET NOCOUNT ON; 

    UPDATE VALVE 
    SET ASSET_TAG = CONCAT (
      Valve.SITE_CODE,'-',Valve.VAREA,'-',valve.VSYS,'-',Cast(pkID AS VARCHAR(50)) 
      ); 
END 
END 
+0

谢谢先生,我会放弃这一点。 –