标签: ddl-trigger

How can I resolve a database trigger's name with built-in functions?

I have a database trigger that I use to prevent me from creating certain procedures in user databases.

It appears in sys.triggers, with an object_id, but I can't use the object_id function to find it.

SELECT OBJECT_ID(t.name, t.type) AS object_id, *
FROM   sys.triggers AS t;
Run Code Online (Sandbox Code Playgroud)

坚果

Likewise, I can find it in sys.dm_exec_trigger_stats. I can't get object_name to resolve, but object_definition does.

SELECT OBJECT_NAME(dets.object_id, dets.database_id) AS object_name,
       OBJECT_DEFINITION(dets.object_id) AS object_definition,
       *
FROM   sys.dm_exec_trigger_stats AS dets;
Run Code Online (Sandbox Code Playgroud)

坚果

Is there a …

trigger sql-server metadata ddl-trigger

8
推荐指数
2
解决办法
466
查看次数

PostgreSQL 事件触发器强制将扩展安装到特定模式

我有一个专用架构extensions(PostgreSQL v 9.6.3),我打算在其中安装我的数据库的所有扩展。我想以某种方式禁止(或至少提醒)用户在没有指定特定架构的情况下安装扩展。

所以这应该失败

CREATE EXTENSION tablefunc;
Run Code Online (Sandbox Code Playgroud)

但这应该会成功:

CREATE EXTENSION tablefunc SCHEMA extensions;
Run Code Online (Sandbox Code Playgroud)

为此,我尝试创建事件触发器:

CREATE EVENT TRIGGER e010_verify_extension_schema_et
  ON ddl_command_end
  WHEN TAG IN ('CREATE EXTENSION')
  EXECUTE PROCEDURE verify_extension_schema();
Run Code Online (Sandbox Code Playgroud)

verify_extension_schema()功能上,我正在尝试使用pg_catalog.pg_event_trigger_ddl_commands(). 但是,该函数不会返回任何我可以用来检查是否已指定架构或与此相关的架构的任何内容...

有没有人有任何想法我怎么能做到这一点?

postgresql trigger dml ddl ddl-trigger

5
推荐指数
1
解决办法
412
查看次数

DDL 触发器未按预期工作 SQL Server 2012

我在 SQL Server 2012 中有一个 DDL 触发器:

CREATE TRIGGER [AuditProcChanges]
ON DATABASE FOR 
CREATE_TABLE,ALTER_TABLE,DROP_TABLE
AS
DECLARE @message_body XML
SET @message_body = EVENTDATA()

    BEGIN
       BEGIN TRANSACTION
       INSERT  INTO MyChangeLog(vcEventType, dtEventTime, vcServerName, vcLoginName
                                            , vcUserName, vcObjectName, vcObjectType, vcSQL)
            SELECT  @message_body.value('(/EVENT_INSTANCE/EventType)[1]',
                                        'varchar(128)') AS EventType,
                    GETUTCDATE() AS PostTime,
                    @message_body.value('(/EVENT_INSTANCE/ServerName)[1]',
                                        'varchar(128)') AS ServerName,
                    @message_body.value('(/EVENT_INSTANCE/LoginName)[1]',
                                        'varchar(128)') AS LoginName,
                    @message_body.value('(/EVENT_INSTANCE/UserName)[1]',
                                        'varchar(128)') AS UserName,
                    @message_body.value('(/EVENT_INSTANCE/ObjectName)[1]',
                                        'varchar(128)') AS ObjectName,
                    @message_body.value('(/EVENT_INSTANCE/ObjectType)[1]',
                                        'varchar(128)') AS ObjectType,
                    @message_body.value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]',
                                        'nvarchar(max)') AS TSQLCommand

        COMMIT TRANSACTION
    END
Run Code Online (Sandbox Code Playgroud)

但是当我从设计视图(右键单击和设计)更改表时,记录的事件只是临时表的创建和主表的删除。Create_Table 事件没有被捕获。

当我们从设计视图更改表时,我们不能捕获日志事件。请帮忙。

sql-server ddl-trigger

3
推荐指数
1
解决办法
408
查看次数

标签 统计

ddl-trigger ×3

sql-server ×2

trigger ×2

ddl ×1

dml ×1

metadata ×1

postgresql ×1