2010-12-03 39 views
3

我有一個重定向數據幷包含來自其他兩個表基於左外部連接的數據的表上的以下觸發器。Sql而不是插入觸發器 - 插入數據如果不存在

如果i.ndl_DeviceID在BBOwnerMap中不存在,則該列將爲空,這很好。

我想要做的是,如果i.ndl_DeviceID不存在BBOwnerMap然後我想將它插入到那裏,並返回結果自動編號BBOwnerMap.OwnerID

觸發如下: -

ALTER TRIGGER [dbo].[Redirect] 
    ON [dbo].[ndl_dump] 
    instead of insert 
AS 

BEGIN 

INSERT INTO ndl_data 
(ndl_Image,ndl_Text,ndl_Lat,ndl_Lng,ndl_CategoryID,ownerID) 

SELECT i.ndl_Image, 
     i.ndl_Text, 
     i.ndl_Lat, 
     i.ndl_Lng, 
     ndl_config.ndl_CategoryID, 
     BBOwnerMap.OwnerID 

FROM inserted i 
     LEFT OUTER JOIN 
     ndl_config 
     ON i.ndl_Category = ndl_config.ndl_CategoryName 
     LEFT OUTER JOIN 
     BBOwnerMap 
     ON i.ndl_DeviceID = BBOwnerMap.DeviceID 
END 

BBOwnerMap表是這樣的: -

[dbo].[BBOwnerMap](
    [OwnerID] [int] IDENTITY(1,1) NOT NULL, 
    [DeviceID] [varchar](50) NOT NULL, 
    [DeviceNumber] [varchar](50) NOT NULL, 
CONSTRAINT [PK_BBOwnerMap] PRIMARY KEY CLUSTERED 

如何修改任何幫助,這將非常感激。

謝謝。

回答

2

您應該可以在觸發器的頂部添加另一個插入語句。一定要記住插入的表可以有多行,所以你正在處理的是集合,而不是行。代碼假定SQL Server。我喜歡找不到匹配的LEFT JOIN,但是您可以使用NOT EXISTS where子句做同樣的事情:

Insert into bbownermap (deviceid, devicenumber) 
Select i.ndl_DeviceID, <deviceNum> 
From inserted i 
    Left join bbownermap b on i.deviceid=b.deviceid 
Where b.ownerid is Null