在插入的表T-SQL上引用列

时间:2012-04-20 05:08:04

标签: sql-server sql-server-2008 tsql

所以,我正在尝试创建一个触发器,如果​​外键代码无效,将在插入数据时抛出错误。我有两个表,Publisher和Title。标题上有发布者代码,Publisher也是如此。我在我的Title for insert上有触发器,我当前正在执行if if not exists并选择Publisher行,其中代码等于插入行的发布者代码。我不知道这是否是正确的方法,而且可能不是,因为SQL给了我一个“多部分标识符Inserted.PublisherCode找不到”错误。你们可以给予的任何帮助将不胜感激。感谢。

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

1 个答案:

答案 0 :(得分:5)

INSERTED和DELETED也是表格

所以你必须这样做:

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

顺便说一句,正如hkf所说,如果你确定了PublisherCode AS外键,你将不需要触发