2017-07-18 127 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

謝謝先生,我會放棄這一點。 –