首页 > 解决方案 > 无法在 Microsoft SQL Server Management Studio 中创建触发器

问题描述

我正在尝试运行此触发器,该触发器假设在同一表中更新一行后更新我的客户表中的一行。

CREATE TRIGGER [project].updateFreeShipping
ON [project].[customers]
AFTER UPDATE
AS
BEGIN
    UPDATE [project].[customers]
    SET NextShippingIsFree = 1
    WHERE Email IN (SELECT TOP 5 Email FROM dbo.Top10byMoney)
END

它抛出以下错误:

消息 8197,级别 16,状态 4,过程 updateFreeShipping,第 2 行
对象“project.customers”不存在或对此操作无效

截屏:

在此处输入图像描述

标签: sql-serverdebuggingtriggers

解决方案


这是一个明显而经典的错误,当您在另一个您通常使用的数据库中执行语句时会引发该错误。很多时候,初学者不会验证上下文数据库,而是尝试在 master 中创建对象,这是 SSMS 中的默认对象。请记住,SQL Server 是一个多数据库多模式 RDBMS,不需要任何 DBlink 来执行从一个 DB 到另一个 DB 的 SQL 脚本......所以要特别注意您上下文使用的数据库!

为避免此类麻烦,请使用 USE 语句开始您的脚本,例如:

USE MyDatabase;
GO
CREATE TRIGGER [project].updateFreeShipping
ON [project].[customers]
AFTER UPDATE
AS
...

我同意所有其他关于您的代码逻辑的评论,这些评论毫无意义......


推荐阅读