动态生成触发器的名称

时间:2018-03-08 04:15:05

标签: sql sql-server triggers

我想根据提供给它的过程提供的输入动态生成触发器的名称。

        CREATE TRIGGER  '[trig'+@TableName + 'InsertLog]'  
        ON  'db.' + @TableName   
        AFTER INSERT
        AS
       [...]

但上述代码会在关键字' TRIGGER'附近引发错误'错误的语法。

非常感谢您在此代码中解决问题的任何工作或见解。

1 个答案:

答案 0 :(得分:1)

您可以使用动态sql。请考虑以下事项:

declare @sql varchar(max)
set @sql = 'CREATE TRIGGER [trig' + @tableName + '_InsertLog]
ON dbo.' + @TableName + '
AFTER INSERT
AS ...'

execute @sql

根据您的SQL风格调整。

警告

那就是说,我想提醒你不要这样做。您可能认为这是重用代码和/或确保一致性的便捷方式。但抽象程度并不好,从长远来看,你只会为自己创造更多问题。例如。这种记录方法是反应性的。因此,当您实际尝试使用日志时,您会发现:

  • 很难从日志中提取语义上有用的信息。 (是的,但很难分析。)
  • 某些日志记录将丢失,因为您无法记录尝试但已回滚的内容。