SqlCommand 不能删除触发器

SqlCommand cannot drop triggers

我正在 .Net 中创建测试方法,需要更改数据库以设置测试场景。我们使用 SqlCommands 发送查询来更改数据库,为此连接字符串是受信任的连接字符串。所有 DROPS 和 ALTER 查询对于表、列、约束等都运行良好。但是当我尝试 DROP 触发器时,出现以下错误。

SQL EXCEPTION: 'Cannot drop the trigger 'dbo.TRIG_Application_Insert', because it does not exist or you do not have permission.'

查询是 DROP TRIGGER [dbo].[TRIG_Application_Insert],它之所以有效,是因为它已在 SQL Management Studio 中直接测试过,并在将触发器添加到数据库的脚本中使用,该脚本通过 sqlcmd 工具.

这可能是权限问题,还是在使用 .Net SqlCommand 时查询需要不同?

我已尝试为 sa 用户和具有高权限的 db 用户使用标准安全连接字符串,但仍然出现相同的错误。

看来您可能访问了错误的数据库,因为您说您使用的是具有更高权限的帐户。我建议在您的脚本中添加一个 USE 以使其命中正确的 Db。无论如何,这是很好的做法。

USE <database name>
DROP TRIGGER [dbo].[TRIG_Application_Insert]

由于您的 Initial Catalog 是 master,您的命令是针对 master 数据库的 运行。你的触发器不在你的命令失败的那个数据库中。您需要将初始目录设置为要连接到的数据库,或者在命令中指定数据库。因此,如果您的数据库是 MyDatabase,请使用:

Data Source=(local)\SQLEXPRESS2012;Initial Catalog=MyDatabase;Integrated Security=True 

或者

DROP TRIGGER [MyDatabase].[dbo].[TRIG_Application_Insert]