-1

情况:我正在AFTER INSERT表上写一个触发器,所以如果我有良好的记忆力,我可以访问INSERTED伪表。触发器有点长,所以我不能在这里复制/粘贴它,但基本上,我想将我插入的行的数据(代表一个好)与另一个表的行(非常相似)进行比较,代表愿望),以确定插入的商品是否符合某人的愿望。

所以,我几乎完成了我的触发器,但发生了错误。在给定的点上,我写道:

-- Create and open a cursor
IF (@variable1 = INSERTED.MyField)
BEGIN
    -- some code
END

-- Deallocate and close my cursor

但我有以下错误:

无法绑定多部分标识符“INSERTED.MyField”

我以为我可以做到,因为此刻只有一行INSERTED(我是对的,不是吗?),但似乎我做不到。

有人可以解释我为什么错了吗?

PS:是的,我看过这个链接,或者这个,或者这个,但是他们都有问题JOIN,我JOIN这里没有

4

1 回答 1

-1

该错误表明 SQL 正在尝试将“INSERTED”读取为另一个表的别名

IF (@variable1 = INSERTED.MyField)

尝试以下方法来引用插入的表

IF (@variable1 = MyField from inserted)

使用插入和删除的表: http ://technet.microsoft.com/en-us/library/ms191300%28v=sql.105%29.aspx

这修复了语法并回答了为什么会发生错误的问题,但不建议将 insert 与标量变量进行比较。正如 HLGEM 所说,如果插入中有多个值,其中一些匹配而一些不匹配,该怎么办。

此外,游标应该是 SQL 中的最后手段。通常,游标速度较慢并且占用资源。SQL 针对基于集合的操作进行了优化,游标不利用这一点。在不确切知道您要在光标中做什么以及您正在操作多少数据的情况下,在这种情况下我不能肯定地说。

StackOverflow 关于光标的众多讨论之一:stackoverflow.com/questions/743183/what-is-wrong-with-cursors

于 2013-11-04T22:27:12.470 回答