2012-04-20 40 views
1

所以,我試圖創建一個觸發器,如果​​外鍵代碼無效,將在插入數據時引發錯誤。我有兩個表格,發佈者和標題。標題上有一個發佈者代碼,發佈者也一樣。我在我的標題插入觸發器,我目前正在做一個如果不存在,並選擇代碼等於插入行的發佈者代碼的發佈者行。我不知道這是否是正確的方法,也可能不是,因爲SQL給了我一個「多部分標識符Inserted.PublisherCode無法找到」的錯誤。任何幫助,你們可以給予讚賞。謝謝。引用插入表上的列T-SQL

go 
create trigger TR_Title_PublisherCode_Insert 
on title 
for Insert 
as 
    if not exists(select * from Publisher where PublisherCode = Inserted.PublisherCode) 
    begin 
     raiserror('Publisher does not exist', 16, 1) 
     rollback tran 
    end 
+5

如果您在架構中正確標識了PublisherCode爲FK,則服務器將自動處理該事件。 – hkf 2012-04-20 05:10:00

+0

是的,我知道= P。但這是爲了一個學校的任務,我們需要創建一個觸發器來做這件事,不幸的是(沒有人說這些練習總是有意義的)。 – Jack 2012-04-20 07:13:47

回答

4

inserted和deleted是表太

所以,你必須這樣做:

if not exists(
    select * from Publisher 
    where PublisherCode in (SELECT PublisherCode FROM inserted) 
) 

順便說一句,作爲香港小輪說,如果你確定PublisherCode AS外鍵,你贏了」無需觸發

+0

謝謝,這正是我需要的! – Jack 2012-04-20 07:20:11