标签: trigger

如何防止sql server中的另一个用户删除sysadmin用户

我在我的服务器上安装了一个遗留应用程序,该应用程序配置为仅与一个用户“sa”一起工作,并且在此应用程序中编写了类似定时炸弹的脚本,只要它找到另一个用户,它就会毫不费力地删除该用户。

我们需要使用另一个应用程序访问数据库,并且“sa”的密码丢失,因此剩下的唯一方法是创建另一个具有系统管理员权限的用户。

但由于脚本删除了所有用户,我不能做任何特别的事情,所以我的问题是:

每次尝试删除我的用户时,如何阻止该脚本或回滚其工作?

trigger sql-server rollback

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

在触发器中使用计数来更新另一个表

假设我有一个表,trx_request其中包含以下数据

id | confirmed(TIME) | finished(TIME)
-------------------------------------
1  | 12:05:00        | NULL
2  | 13:11:00        | NULL
Run Code Online (Sandbox Code Playgroud)

和另一个trx_updates使用以下数据调用的表

request(FK) | role(INT) | added(TIME)
------------------------------------------
1           | 1         | 14:02:00
Run Code Online (Sandbox Code Playgroud)

我想制作一个触发器,在将记录插入后trx_updates,计算该request字段中有多少记录具有相同的值(例如有多少个“1”)。然后,检查计数是否达到 4(“1”出现 4 次)。当它发生时,它会将 更新trx_requests.finished为 NOW()。

如何在触发器中创建一个计数语句?或者触发器是要走的路?

mysql trigger count

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

SQL Server:触发器 FOR DELETE

我想创建一个触发器,它并不如他的名字删除客户Peter。我怎样才能做到这一点?

CREATE TRIGGER trgCUSTOMER ON customer
FOR DELETE
AS
BEGIN
    IF (SELECT name FROM deleted) not like 'Peter'
    BEGIN
        delete from customer where name = (select name from deleted);
    END
END;
Run Code Online (Sandbox Code Playgroud)

trigger sql-server delete

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

如何从 SQL Server 中还原的数据库中删除触发器

我正在使用 SQL Server 2008 Management Studio。我.bak从客户那里得到了一个备份文件来解决一个特定的问题。

.bak文件中恢复数据库后,我无法执行任何更改查询或更改主密钥。

在我的新数据库中,在客户端环境 DB 中创建的所有触发器都附加到它。所以得到以下错误。

消息 208,级别 16,状态 1,过程 dbtrg_DBEventsmodel,第 16 行
无效的对象名称“DBMonitor.dbo.ddl_DBEvents”。

有没有办法在恢复的数据库中分离这些触发器?

trigger sql-server restore

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

检查触发器是否被 INSERT 或 DELETE 触发

我知道这是您可以在本网站上找到的最简单的问题,但我无法在互联网上找到答案。

如何检查触发器是否由INSERT或触发DELETE

例子

CREATE TRIGGER [dbo].[TestTrigger]
On [dbo].[Table1]
AFTER INSERT, DELETE
AS
    --if save
    --do some work

    --else if delete
    --do some work other work
Run Code Online (Sandbox Code Playgroud)

如果是insert,我想做一些工作,如果是delete ,我想做一些其他工作。

请提供相同的代码片段。

trigger sql-server insert t-sql sql-server-2008-r2

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

TSQL 2012 删除了 INSTEAD OF 和 AFTER 触发器中的表?

我的同事问我很简单,但对我来说很难的问题:

如果我deletedINSTEAD OF触发器中有 10 条记录的表并且我删除了其中的 8 条记录,那么我deletedAFTER触发器中的表中有多少条记录?

我认为它应该是 10,但我不确定。

trigger sql-server-2012

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

如何在 Oracle db 中的同一个 `Instead Of` 触发器中组合插入、更新和删除?

创建Instead Of触发器时,Sql Developer 允许在同一个触发器中包含所有 3 个 DML 操作:

在此处输入图片说明

结果 SQL 如下所示:

CREATE OR REPLACE TRIGGER TRIGGER1 
INSTEAD OF DELETE OR INSERT OR UPDATE ON PO_COSTED_BOM_V 
BEGIN
  NULL;
END;
Run Code Online (Sandbox Code Playgroud)

我能够结合InsertUpdate喜欢这样的:

CREATE OR REPLACE TRIGGER TRIGGER1 
INSTEAD OF INSERT OR UPDATE OR DELETE ON PO_COSTED_BOM_V 
BEGIN
  UPDATE SRC_TBL SET CFG_VALUE = :NEW.CFG_VALUE
  WHERE CFG_NAME = :NEW.CFG_NAME;
  IF SQL%NOTFOUND THEN
      INSERT INTO SRC_TBL (CFG_NAME, CFG_VALUE) 
         VALUES(:NEW.CFG_NAME, :NEW.CFG_VALUE);
  END IF;
END;
Run Code Online (Sandbox Code Playgroud)
  • 但是如何将Delete语句放入触发器中?
  • 触发器如何知道执行了哪个 DML 操作?

谢谢

trigger oracle plsql dml

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

禁用触发器来禁用外键约束是个好主意吗?

背景

我们正在将遗留应用程序从非关系型数据库迁移到 PostgreSQL。

问题

我们希望在许多字段上启用外键以实现未来的数据完整性,以便报告工具可以轻松确定哪些表已链接。某些当前数据无法通过 FK 检查,并且由于连接到数据库的旧应用程序,我们还无法打开 FK。

临时解决方案

一些程序员建议我们禁用数据库上的触发器,如此处所示,这样 FK 就不会被强制执行,但仍可用于报告工具。

我担心这会导致一系列其他意想不到的后果,但我不确定它们是什么。谁能消除我的恐惧或解释为什么这是一个非常糟糕的主意?我假设它不好的一个原因是它会禁用所有触发器,而不仅仅是触发 FK 约束的触发器。

postgresql trigger foreign-key

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

INSTEAD OF 触发器内的确定性

参考我之前关于首选设计的问题,以避免循环或多个更新路径参照完整性通过ON UPDATE CASCADE和级联更新和删除ON DELETE CASCADE,我正在尝试使用触发器作为替代方案。

对于这个例子,我试图尽可能地简化设计。

我有一张Parent桌子和一张Child桌子;ParentChild共享一列,ParentName。每当Parent.ParentName发生变化时,我都想在Child.ParentName.

够简单吗?如果我更新 中的单行Parent,我可以使用inserteddeleted表很容易地知道要更新ParentChild表中的哪一行。像这样的东西:

UPDATE Parent
SET Parent.ParentName = inserted.ParentName
FROM Parent
    INNER JOIN deleted ON Parent.ParentName = deleted.ParentName
    CROSS JOIN inserted;

UPDATE Child
SET Child.ParentName = inserted.ParentName
FROM Child
    INNER JOIN deleted ON Child.ParentName = deleted.ParentName
    CROSS JOIN inserted;
Run Code Online (Sandbox Code Playgroud)

很明显,如果Parent在一个 …

trigger sql-server referential-integrity

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

为什么我的数据库结构和 SELECT 操作会生成 NULL?

我对数据库问题没有太多经验,所以请原谅文字墙,我相信上下文对于理解问题和目标很重要。


我每天都会从另一个系统收到一个 CSV 文件,我希望将其保留在 Microsoft SQL Server 上运行的数据库中。为了实现这一点,我每天安排一个 PowerShell 脚本,它使用 bcp 实用程序将 CSV ( accounts.csv ) “加载”到accounts_stage具有 CSV 文件“精确”布局的表 ( ) 中。此外,我将时间戳“写入”到另一个表 ( import_stage) 中。该accounts_stage表具有触发器集,并且 bcp 配置为触发该触发器。

导入完成后,我想“规范化”数据。对于一个基本示例,假设这仅涉及合同编号(在 CSV 文件中名为“Vnr”的字段),它是一个字符串。我有另一个表 ( contracts),它被触发器填充:

INSERT INTO dzp.contractid(vnr)
SELECT DISTINCT
    a.Vnr
FROM dzp.accounts_stage a
WHERE NOT EXISTS(
    SELECT id.vnr
    FROM dzp.contractid id
)
Run Code Online (Sandbox Code Playgroud)

这应该并且似乎完成了将所有导入到表中的合同编号contractidscontractids.contractId是 BIGINT PRIMARY KEY、IDENTITY 和自动增量。

我将导入元数据添加到我的表中,如下所示:

   CREATE TABLE #IMPORTMETADATA
            ([importid] bigint
            ,[generated_timestamp] datetime …
Run Code Online (Sandbox Code Playgroud)

trigger sql-server-2008 sql-server import csv

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