[supervisord]
nodaemon=true
[program:openfire]
command=/etc/init.d/openfire start
[supervisorctl]
serverurl=http://localhost:8090
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[inet_http_server]
port = 8090
我无法找到使用IF EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(@TriggerName))
DROP TRIGGER @TriggerName
的正确语法(我想我在@TriggerName
内做得很好,但我找不到{{1}的正确方法1}}名称)。
如果已经存在,我需要放下触发器。
我从当前的SQL语句中得到此错误:
' @ TriggerName'附近的语法不正确。期待'。',ID或Quoted_ID。
答案 0 :(得分:1)
我认为你需要使用动态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
语法允许用变量替换标识符名称。
答案 1 :(得分:0)
您无法通过变量在DROP TRIGGER中指定触发器名称。您需要特定的硬编码名称或动态SQL(此处实际为DDL)。
declare @ddl nvarchar(2000)
if exists(...)
begin
set @ddl=N'drop trigger ' + @triggerName
exec sp_executesql @ddl
end
无论如何要小心,不要将用户输入作为触发器名称,这将是一个严重的安全风险。
顺便说一句:你有没有理由不查询这个名字' sys.triggers中的列直接?