2017-06-15 40 views
1

我想創建一個觸發器,以便在另一個表中創建記錄時將記錄插入到一​​個表中。我已經想出瞭如何做到這一點,但我試圖找出如何更改其中一個列值的值。SQL觸發器插入創建轉換列

在原始表中我有'縣',在第二張表中我有一個來自'縣'表的'縣ID'。我如何將這個'縣'轉換成'CountyID'?

我的觸發迄今爲止 -

CREATE TRIGGER [dbo].[AQB_RMS_LocationCreate] on [AVData].[dbo].[SourceSite] 
AFTER INSERT 
AS 
BEGIN 

INSERT INTO AQB_MON.[AQB_RMS].[Location] 
([LocationName],[Latitude],[Longitude],[Enabled] 
    ,[StreetAddress1],[StreetAddress2],[City],[CountyID],[StateAbbr],[ZipCode],[DATE_CREATED]) 

SELECT i.[Description],i.[Latitude],i.[Longitude],i.[Enabled] 
    ,i.[StreetAddress1],i.[StreetAddress2],i.[City],i.[County],i.[StateRegion],i.[ZipCode], getdate() 

from [AVData].[dbo].[SourceSite] ss 
inner join inserted i on ss.SourceSiteID = i.SourceSiteID 

END 

GO 
+0

「縣」表中與插入的數據相匹配的字段是什麼?另外,由於插入中沒有使用任何列,因此您當前擁有的連接似乎沒有做任何事情。除非您使用它來檢查'SourceSite'表中是否存在記錄? –

+0

「縣」表只有「縣」和「縣ID」。我不確定這些連接。我在其他地方使用類似的觸發器,並執行插入 –

回答

1

這是不是工作?

CREATE TRIGGER [dbo].[AQB_RMS_LocationCreate] on [AVData].[dbo].[SourceSite] 
AFTER INSERT 
AS 
BEGIN 

INSERT INTO AQB_MON.[AQB_RMS].[Location] 
([LocationName],[Latitude],[Longitude],[Enabled] 
    ,[StreetAddress1],[StreetAddress2],[City],[CountyID],[StateAbbr],[ZipCode],[DATE_CREATED]) 

SELECT i.[Description],i.[Latitude],i.[Longitude],i.[Enabled] 
    ,i.[StreetAddress1],i.[StreetAddress2],i.[City],C.CountyId,i.[StateRegion],i.[ZipCode], getdate() 

from [AVData].[dbo].[SourceSite] ss 
inner join inserted i on ss.SourceSiteID = i.SourceSiteID 
inner join dbo.County C on C.County = i.County 


END 
+0

它寫了記錄,但將CountyID留空。我沒有收到任何我能看到的錯誤。 –

+0

我必須輸入錯誤的東西,因爲使用上面的示例它現在可以工作。我確實把'inner join'改成了'left join'來考慮在我的代碼表中找不到的條目。 –