2011-11-14 107 views
1

我一直在尝试使用更新触发器来检查主表中的title_id。这是我做过什么:使用更新触发器

ALTER TRIGGER [dbo].[EX6] on [dbo].[sales] 
    INSTEAD OF UPDATE NOT FOR REPLICATION 
AS 
BEGIN 
    IF EXISTS(SELECT S.title_id 
      FROM inserted S 
      INNER JOIN Titles T On T.title_id = S.title_id) 
    BEGIN 
     UPDATE Sales 
     SET sales.stor_id = inserted.stor_id 
     , sales.ord_num = inserted.ord_num 
     , sales.title_id = inserted.title_id 
      , sales.ord_order = inserted.ord_order, 
     ,sales.qty = inserted.qty 
    END 

然而,当我执行此,我收到以下错误:在更新命令中使用的列的其余部分发生

 the multi-part identifier inserted.stor_id could not be bound 

同样的错误。因此,可以ü请帮助我解决这个成功更新数据库中列..

回答

2

你插入的别名是S,所以你将需要继续在你的UPDATE声明

ALTER TRIGGER [dbo].[EX6] on [dbo].[sales] 
    INSTEAD OF UPDATE NOT FOR REPLICATION 
AS 
BEGIN 
    IF EXISTS(SELECT S.title_id 
      FROM inserted S 
      INNER JOIN Titles T On T.title_id = S.title_id) 
    BEGIN 
     UPDATE st 
     SET st.stor_id = S.stor_id 
     , st.ord_num = S.ord_num 
     , st.title_id = S.title_id 
     , st.ord_order = S.ord_order 
     , st.qty = S.qty 
     FROM Sales AS st 
     INNER JOIN inserted S ON st.stor_id = S.stor_id 
    END 

我已更新答案以反映聊天中讨论的更改。

+0

不...还是一样的错误.. – user838359

+0

对不起,第一次没仔细看。我更新了我的查询。你需要加入插入(可能标题)表到你的更新声明,以带来数据 –

+0

没有..仍然是相同的错误 – user838359