标签: trigger

使用 SSIS 和目标表上的触发器进行表数据传输

我是数据库操作的新手。SQL Server 2008 R2 是我使用的数据库。

我需要将选定的行从临时数据库表移动到生产数据库表。我正在使用 SSIS 包来做到这一点。我在目标表上几乎没有触发器。当我将数据从源表传输到目标表时,我现在很困惑这些触发器是否会被触发。

如果在将数据从源表传输到目标表时不会触发这些触发器,在此数据传输过程中是否可以执行任何操作来触发这些触发器?

给我一些关于上述的信息将不胜感激。

更新:选定的行将被添加到目标表中。触发器将根据新插入的数据更新目标服务器中某个其他表中的数据。例如:

    CREATE TRIGGER [MyTableChange] 
       ON  [dbo].[DestinationTable]
       AFTER INSERT,UPDATE
    AS 
    BEGIN

    declare @newid as int
    select @newid=newid  FROM INSERTED

     Declare @total as int
     declare @lookatme as int
    select @total=total, @lookatme from DestinationTable where newid=@newid
    update anothertable set total=total+@total where lookwhere=@lookatme
    END

GO
Run Code Online (Sandbox Code Playgroud)

上面的触发器是一种示例,与我在原始触发器中的逻辑不完全相同。但它提供了我正在尝试做什么的信息。我将访问新插入的行详细信息以更新另一个表值。请不要将其视为语法和编写方式方面的正确触发器。我只是试图给出原始触发器的本质。

trigger sql-server ssis

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

在 mysql 中 24 小时后自动更新列

我有一个带有列的表 T1:

Name      State             time
mon         1          2014-01-09 11:23:00
tue         0          2014-01-07 14:40:00
wed         2          2014-01-08 09:23:00 
thu         0          2014-01-09 12:23:00   
Run Code Online (Sandbox Code Playgroud)

现在我想安排一个事件或开发一个触发器(如果可能),如果任何状态为 0/2 并且其时间距当前时间超过 24 小时,则应将其更新为 1。

例如在上表中, Tue 的 state 是 0 并且 time 超过 24 hours ,所以 state 应该更新为 1 并且同样适用于 wed ,但不适用于 thu 。

我经历了很多问题,例如:

/sf/ask/1217146171/

/sf/ask/869522951/

但我还没明白,如何解决我的问题

mysql trigger stored-procedures mysql-5.5 event

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

表 A 触发对表 B 的插入,表 B 触发对表 A 的插入,会发生什么?

假设我有两个表,表 A 和表 B。表 A 有一个插入触发器,可将记录插入表 B。表 B 有一个插入触发器,可将记录插入表 A。在这种情况下会发生什么?这两个触发器是否会一遍又一遍地将记录插入表中,直到数据库填满?这种情况发生的次数有限制吗?

trigger sql-server insert t-sql

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

通过 information_schema 更新 mysql 触发器——访问被拒绝?

对于 MySQL(实际上是 MariaDB)中的某些触发器,我有一些错误的“定义器”。我认为纠正它们的最简单方法是以下版本:

use information_schema;
update triggers set definer=current_user() where trigger_schema='foobar';
Run Code Online (Sandbox Code Playgroud)

它产生:

ERROR 1044 (42000): Access denied for user 'root'@'localhost' to database 'information_schema'
Run Code Online (Sandbox Code Playgroud)

在同一个会话中,我可以使用“删除触发器”和“创建触发器”删除并重新创建触发器,因此我不了解权限问题。我的用户是否需要一些它没有的特权?

mysql schema trigger

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

MySQL - 如何在几年内制作 DATEDIFF?

这是我的第一篇文章(英语不是我的母语)所以我希望我不会把这篇文章搞砸。

我是 MySQL 的新手,但我从 100 多个 youtube 教程和您的大量帖子中学到了很多东西。我使用 PHPmyadmin 和 MySQL Workbench 设计了我的数据库。

在我的表subventions(grants) 中,我创建了一个触发器,以便能够使用我的列subventions.début(beginning)、subventions.fin(end) 和subventions.montant(amount)来计算每年的赠款金额。

因为DATEDIFF只给了我几天的答复,我天真地以为我只需要除以365天就能得到我的答复。如果我的开始日期是 1 月 1 日,结束日期是 12 月 31 日,它会起作用,但如果它在一年中的其他地方出现,则不起作用。这是我的触发器:

SET NEW.montant_annuel = NEW.montant / (datediff(NEW.fin,NEW.début)/365)
Run Code Online (Sandbox Code Playgroud)

这是我的表格和“montant_annuel”列中的结果: 表 : 补助金

如果我使用 365.25(这是一年中的“真实”天数),它也不起作用。

谢谢!:)

mysql trigger date

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

而不是插入触发器 VS For 在 SQL Server 中插入触发器

编辑:我的问题是因为在而不是关闭插入触发器中有一个插入语句,那么它应该从而不是关闭插入触发器内部调用插入触发器,并且应该避免在测试表中插入行。我的观察是,插入触发器正在触发,但在关闭触发器之后,它已经在可测试中插入了新行。因为插入触发器引发错误,但关闭触发器已经在测试表中插入了一行。为什么不从内部调用插入触发器而不是从插入触发器中调用?

我在名为 TestTable 的表上有两个触发器。一个是代替插入触发器,第二个是插入触发器后。首先而不是插入触发器将触发,然后插入触发器。它在TestTable 和CopyTable 中插入新行,但不在AuditTable 中插入新行。

我的问题是为什么不触发插入触发器而不是触发器?它应该是因为它也在其中使用插入查询。为什么 TestTable 得到新插入的行?

我的表脚本

CREATE TABLE [dbo].[TestTable](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](50) NULL,
    [Age] [int] NULL,
    [DOB] [date] NULL,
    [Address] [nvarchar](50) NULL,
 CONSTRAINT [PK_TestTable] PRIMARY KEY CLUSTERED 
Run Code Online (Sandbox Code Playgroud)

我的 SQL 查询:

Insert into dbo.TestTable values ('Waleed',24,'10-2-2015','Lahore');
Run Code Online (Sandbox Code Playgroud)

我的而不是插入触发器是:

ALTER TRIGGER [dbo].[utInsteadoff]
   ON  [dbo].[TestTable] 
   Instead of Insert
AS 
    Declare @Name as nvarchar(50)
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    Insert into …
Run Code Online (Sandbox Code Playgroud)

trigger sql-server

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

编辑另一列时更新一个 mysql 列

我正在尝试制作一个日期时间字段,仅当某个字段发生更改时,该字段才会自动更新为当前时间。

看来我有语法错误。我尝试last_progress_date获取progress_percentage更新/编辑的日期:

CREATE OR ALTER TRIGGER last_progress_date
ON wp_task_mgr
AFTER UPDATE  
AS BEGIN
   IF UPDATE (progress_percentage)
   SET last_progress_date = GETDATE()
END
Run Code Online (Sandbox Code Playgroud)

mysql trigger

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

更改数据捕获与记录更改的触发器

我将创建由触发器填充的历史表(在插入、更新、删除之后)。由于只有 20% 的列要更新,我决定只记录更改的值 - 如果值没有更改,NULL则将在历史表中使用值。例如:

在此处输入图片说明

sparse与记录所有数据的普通实现相比,历史表列将节省大量空间(这是由于我的测试和我的业务案例)。

作为我的SQL Server 2016 SP1 standard edition支持者,Change Data Capture我想知道他们使用它和基于触发器的日志记录之间有什么优点/缺点/区别?

我检查了一些文章(这里这里),但看不出还有什么Change Data Capture可以给我的。

trigger sql-server t-sql change-data-capture sql-server-2016

3
推荐指数
2
解决办法
6400
查看次数

触发器执行的最后时间

SQL SERVER 2014 - 有没有办法知道上次执行触发器的时间?

trigger sql-server sql-server-2014

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

如何从 PostgreSQL 中的触发器访问其他 INSERTed/UPDATEd 行?

MS SQL 中的解决方案

MS SQL触发功能具有deletedinserted在其中受操作的所有行存储系统表。您可以计算更新的行数:

set @updatedCount = (select count(*) from deleted)
Run Code Online (Sandbox Code Playgroud)

或找出最小值:

set @updatedMinimumCol1 = (select min(col1) from deleted)
Run Code Online (Sandbox Code Playgroud)

PostgreSQL 的问题

对于FOR EACH ROW触发器,我可以使用 OLD 和 NEW 系统记录,但它们每次调用触发器只存储 1 行。触发器的调用是分开的,所以如果用户更新 10 行,触发器将被调用 10 次,但每次我只能知道 1 个当前行,而不是所有 10 行。

因为FOR EACH STATEMENT我根本不知道任何访问更新行的机制。我使用 PostgreSQL v9.6OLD TABLENEW TABLE在 v10 中引入。

PostgreSQL 不允许在语句级触发器中引用旧表和新表,即包含所有旧行和/或新行的表,这些表由 SQL 标准中的 OLD TABLE 和 NEW TABLE 子句引用。


尝试使用 transaction_timestamp() 附加列

我可以DEFAULT transaction_timestamp()向主表添加特殊列,然后使用它来区分刚刚更新的行与其他行,但这不是解决方案,因为多个INSERTs/UPDATEs …

postgresql trigger postgresql-9.6

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