IF EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(@TriggerName))
DROP TRIGGER @TriggerName我无法找到正确的语法来使用@TriggerName (我认为我在OBJECT_ID中做得很好,但是我找不到正确的DROP TRIGGER名称)。
如果已经存在的话我需要放下扳机。
我从我当前的SQL语句中得到了这个错误:
“@TriggerName”附近语法不正确。期望“.”、ID或Quoted_ID。
发布于 2016-12-11 12:45:37
我认为您需要为此使用动态SQL:
IF EXISTS (SELECT 1 FROM sys.triggers WHERE object_id = OBJECT_ID(@TriggerName))
BEGIN
DECLARE @sql nvarchar(max);
SET @sql = 'DROP TRIGGER @TriggerName';
SET @sql = REPLACE(@sql, '@TriggerName', @TriggerName);
exec sp_executesql @sql;
END;我认为DROP语法不允许变量替换标识符名。
发布于 2016-12-11 12:52:00
不能通过变量在DROP触发器中指定触发器名称。您要么需要一个特定的硬编码名称,要么需要动态SQL (这里实际上是DDL)。
declare @ddl nvarchar(2000)
if exists(...)
begin
set @ddl=N'drop trigger ' + @triggerName
exec sp_executesql @ddl
end无论如何,要小心,不要将用户输入作为触发器名,这将是一个严重的安全风险。
顺便问一句:您为什么不直接查询sys.triggers中的“name”列?
https://stackoverflow.com/questions/41086123
复制相似问题