sql-server - 无法在 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”不存在或对此操作无效
截屏:
解决方案
这是一个明显而经典的错误,当您在另一个您通常使用的数据库中执行语句时会引发该错误。很多时候,初学者不会验证上下文数据库,而是尝试在 master 中创建对象,这是 SSMS 中的默认对象。请记住,SQL Server 是一个多数据库多模式 RDBMS,不需要任何 DBlink 来执行从一个 DB 到另一个 DB 的 SQL 脚本......所以要特别注意您上下文使用的数据库!
为避免此类麻烦,请使用 USE 语句开始您的脚本,例如:
USE MyDatabase;
GO
CREATE TRIGGER [project].updateFreeShipping
ON [project].[customers]
AFTER UPDATE
AS
...
我同意所有其他关于您的代码逻辑的评论,这些评论毫无意义......
推荐阅读
- python - Django ForeignKey 返回 id 而不是 name
- python - 如何从python和beautifulsoup中的页面中获取iframe数据范围
- django - Django 无法解析 db 服务的名称
- asp.net-mvc - 删除文件后网站构建但发布到 Azure 失败
- android-jetpack-compose - 带有 Jetpack Compose 的 SplashScreen 兼容库
- c++ - C++ 线程请求
- c# - 无法滚动在移动设备上使用 Xamarin.Forms 创建的 xaml 页面
- javascript - Google Calendar API:检查日历上是否存在事件
- c# - 无法在类型参数化方法中将子类隐式转换为父类
- c# - 初始化通用类型属性