标签: trigger

将触发器与 SQL Server Profiler 表一起使用时出错

在最近对默认跟踪输出的分析中注意到 100 个 sort_warning 错误后,我正在尝试获取导致这些警告的查询文本。

在此处输入图片说明

SQL Server Profiler 有一个名为 Sort Warnings 的事件,但它没有 TextData 列。

2008 R2 无法使用扩展事件,因为 sort_warning 事件在 2008 R2 的扩展事件中不可用。

我想在我用来存储分析器结果的表上放置一个触发器,以捕获来自 DBCC INPUTBUFFER 的输出。

-- table to store the results of dbcc inputbuffer
CREATE TABLE Trace_Results(EventType NVARCHAR(30), Parameters INT, EventInfo NVARCHAR(255))

CREATE TRIGGER [dbo].[Trace_Trigger]
  ON [dbo].Trace_Table
  AFTER INSERT
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @SQL VARCHAR(MAX)

    SELECT @SQL = 'DBCC INPUTBUFFER(' + CONVERT(VARCHAR(10), ins.SPID) + ')'
    FROM   inserted ins

    --PRINT @SQL

  INSERT INTO Trace_Results (EventType, Parameters, EventInfo)
    EXEC(@SQL) …
Run Code Online (Sandbox Code Playgroud)

trigger profiler sql-server-2008-r2

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

由于活动而无法更新触发器

尝试向附加到经常使用的表的触发器添加一行

ALTER TRIGGER [dbo].[name_of_trigger] ON [dbo].[name_of_table] AFTER UPDATE
BEGIN

   IF ORIGINAL_LOGIN() in ('username')   RETURN

....somecode

END
Run Code Online (Sandbox Code Playgroud)

陷入僵局,唯一的解决方案似乎是每隔几秒钟重试一次,到目前为止还没有奏效。除了按 F5 并希望它有效之外,还有其他方法可以让我的 if 条件处于何种状态吗?

谢谢,

克雷格

trigger sql-server-2008 sql-server concurrency

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

如何在 postgresql 中为多个表重用更新触发器?

在新项目的数据库中,我已经开始约定让每个表都有一个最后修改的时间戳列。为了实现这一点,我为每个表编写了一个触发器:

CREATE TRIGGER touch_users
  BEFORE UPDATE
  ON users
  FOR EACH ROW
  WHEN (OLD.modification_time IS NOT DISTINCT FROM NEW.modification_time)
  EXECUTE PROCEDURE touch_modification_time();

CREATE TRIGGER touch_company
  BEFORE UPDATE
  ON company
  FOR EACH ROW
  WHEN (OLD.modification_time IS NOT DISTINCT FROM NEW.modification_time)
  EXECUTE PROCEDURE touch_modification_time();

-- etc for each table
Run Code Online (Sandbox Code Playgroud)

这很快就会变得乏味;特别是因为它们完全相同,除了表名。

有没有办法可以减少每个表所需的样板文件?或者甚至可能通过一个默认作用于每个表的触发器完全消除它?

postgresql trigger audit metadata update

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

我有一个 INSTEAD OF 触发器,但是当我插入视图时 PostgreSQL 仍然抱怨

我创建了一个视图和一个 INSTEAD OF 触发器,用于从该视图中插入/更新/删除。现在我尝试向视图中插入一些数据,PostgreSQL 返回以下错误(捷克语翻译:“chyba”=“error”,“Stav SQL”=“SQL state”):

ERROR:  cannot insert into view "ukaz_lok"
DETAIL:  Views that return columns that are not columns of their base relation are not automatically updatable.
HINT:  To enable inserting into the view, provide an INSTEAD OF INSERT trigger or an unconditional ON INSERT DO INSTEAD rule.
********** Chyba **********

ERROR: cannot insert into view "ukaz_lok"
Stav SQL: 55000
Run Code Online (Sandbox Code Playgroud)

这发生在其他一些 INSTEAD OF 触发器之前 - 这个错误只持续了一段时间(几个小时?我不记得了)然后 PostgreSQL 找到了触发器。我尝试了各种事情(更改触发器,删除所有触发器和视图并重新创建它们等),但我不确定什么有效,只是有些东西有效。那么究竟如何让 PostgreSQL 识别触发器呢?

我在 Windows XP 32 位上有 PostgreSQL …

postgresql trigger view plpgsql

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

如何在sql server 2008中为数据库的存储过程、触发器和函数创建备份?

我在 2 个不同的服务器(.246 和 .252)中有 2 个数据库。我需要为 252 服务器中的所有存储过程、触发器和函数创建备份,并在 246 服务器中恢复它。两台服务器中的数据库名称都是 transcredit。252台服务器中大约有500SP。谁能帮我?

trigger sql-server backup stored-procedures functions

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

为什么/何时创建 mysql 触发器需要超级权限?

我试图解析和理解 MySQL 文档所说的何时创建触发器需要 SUPER 权限。他们说:

如果启用了二进制日志,CREATE TRIGGER 可能需要 SUPER 权限[1]

这种暗示在某些情况下它不需要 SUPER 特权。他们指的是 log_bin_trust_function_creators=1 设置,还是还有其他东西?

其次,在[2]中他们说:

... 信任不会创建将导致不安全事件写入二进制日志的存储函数。

这里究竟有什么危险?二进制日志中哪些类型的事件可能是“不安全的”,对谁来说?

[1] https://dev.mysql.com/doc/refman/5.7/en/create-trigger.html

[2] https://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_log_bin_trust_function_creators

mysql trigger security

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

延迟触发执行

在问这个问题之前,让我先解释一下场景。

我有一个包含一组表的数据库。一个表,比如表 A,包含用户名详细信息,而另一个表,比如表 B,包含用户活动日志。当从表 A 中删除特定用户条目时,我想从表 B 中删除特定用户日志。我可以使用触发器来执行此操作,但要求在某个时间后(例如 5 分钟后)应删除表 B 中的条目),而不是立即。

是否可以将触发器执行延迟 5 分钟?触发器的可能设计是什么。在这种情况下,延迟触发是否会有所帮助。

postgresql trigger

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

如何判断是插入还是更新

每当在 CUSTOMER 表中发生 INSERT 时,我需要调用“ StoredProcedure1 ”并且在 CUSTOMER 表中发生 UPDATE,我需要在触发器中调用“ StoredProcedure2 ”。 如何确定是在 SQL Server 2008的触发器中插入还是更新

有人可以请帮我如何解决?

代码:

CREATE TRIGGER Notifications ON CUSTOMER
FOR INSERT,UPDATE
AS
BEGIN
DECLARE @recordId varchar(20);
set @recordId= new.Id;
    //if trigger is insert at the time I call to SP1
        EXEC StoredProcedure1 @recordId
    //if trigger is Upadeted at the time I call to SP2
        EXEC StoredProcedure2 @recordId
END
Run Code Online (Sandbox Code Playgroud)

trigger sql-server-2008 insert update

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

通过 Postgres 触发器中的键分配给 NEW

在触发器主体中,如何NEW通过其字段名称为其分配值?
这就是我想要做的:

some_key = "some_column";
NEW[some_key] = 5;
Run Code Online (Sandbox Code Playgroud)

postgresql trigger plpgsql functions

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

使用触发器在插入或更新时将列与 json 列中的字段同步

我是一个数据库/postgres 初学者,所以请耐心等待。
如果我有一张桌子,就像这样。

CREATE TABLE testy (
    id INTEGER REFERENCES other_table,
    name varchar(128) PRIMARY KEY,
    json JSONB NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

我在寻找插入或更新,将设置列之前创建一个触发器id,并name与在相同名称字段的值json

因此,例如,如果testy包含以下内容UPDATE testy SET json = '{"id":2,"name":"jim"}' WHERE id = 1并被调用。

id | name | json
---+------+-----
 1 | "jim"| {"id":1,"name":"jim"}
Run Code Online (Sandbox Code Playgroud)

想要的结果是

id | name | json
---+------+-----
 2 | "jim"| {"id":2,"name":"jim"}
Run Code Online (Sandbox Code Playgroud)

我希望使其相当通用,因此不需要对列名进行硬编码。如果相应的 json 字段不存在,则将该列设置为 NULL 即可。到目前为止我有

CREATE TABLE testy_index (
    id INTEGER PRIMARY KEY
);

INSERT INTO testy_index VALUES …
Run Code Online (Sandbox Code Playgroud)

postgresql trigger plpgsql json postgresql-9.4

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