我正在将数据从SQLSERVER迁移到MySQL。我在为TRIGGER_NESTLEVEL()找到替代函数方面遇到了一些困难。
什么是TRIGGER_NESTLEVEL() SQLSERVER函数在MySQL中的等效值(递归结束时触发)。如果它没有递归,那么如何检测递归是否以另一种方式结束?
以下是我的疑问:
ALTER TRIGGER [dbo].[TGR_UPD_NAME]
ON [dbo].[TBL_MS_NAME] FOR UPDATE,INSERT
AS
BEGIN
IF ((SELECT TRIGGER_NESTLEVEL()) > 1 )
RETURN
我的触发器在这里受影响的表上:
UPDATE TABLE_NAME SET VALUE = @VALUE
现在我执行上面的查询意味着触发器将立即执行
TRIGGER
AFTER UPDATE
AS
BEGIN
.
.
UPDATE TABLE_NAME SET VALUE = @VALUE
.
.
END
现在,第二个update查询execute意味着触发器是否会再次执行,这是我的问题。
我有一个包含uploaddate和systemuser列的表,还有一个触发器来为新记录添加用户和日期。
USE [ITPrinter]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[trg01]
ON [dbo].[Printers]
FOR INSERT
AS
BEGIN
SET NOCOUNT ON;
UPDATE Printers
SET UploadDate = GETDATE(), SystemUser = SUSER_SNAME()
WHERE
DB: MySQL
使用: MySQL工作台
我目前正在为班级设计一个项目,我们必须设计一个机场网站,用户可以登录/注册和购买各种航班提供的机票。在这个项目工作了一段时间之后,我意识到我的触发器不起作用了。
我收到错误:Error Code: 1442. Can't update table 'reservation' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
在创建供用户选择和购买门票的表单
我正在尝试设置一个MySql触发器,以便在ODBC中插入/更新数据后运行。
我的扳机在下面:
CREATE TRIGGER `myTrigger`
AFTER INSERT ON `testTable` FOR EACH ROW UPDATE `testTable` SET `Field One` = CONCAT(`Field One`, ' - Trigger');
我的触发器语句在MySql工作台中运行,但当我从Microsoft数据库连接到testTable,然后尝试插入一行时,就会得到其中一个:
为了使事情更有趣,当我尝试运行以下命令时:
INSERT IN
下面是描述问题陈述的带有注释的代码片段。我们有一个update触发器,它在内部调用同一个表上的另一个update触发器,尽管Recursive trigger Enabled属性设置为false。
我想知道这是什么原因,因为这对我的应用程序造成了严重破坏。
/* Drop statements for the table and triggers*/
IF EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(N'[dbo]. [t_upd_TestTrigger_002]'))
DRO
如何防止触发器的递归执行?假设我想在帐户表上构造一个“树可”的描述。因此,当插入/更新新记录时,我更新父记录的down_qty,因此这将递归地触发更新触发器。
现在,我的代码还好--我把它放在了UPDATE触发器的第一行:
-- prevents recursive trigger
if new.track_recursive_trigger <> old.track_recursive_trigger then
return new;
end if;
当我需要更新父记录的qty时,这是我触发器中的示例代码:
update account_category set
我在SQL Server2008数据库的一个表上使用了以下触发器。它在递归,所以我需要停止它。
在我插入或更新一条记录之后,我尝试简单地更新该表上的单个字段。
触发器是这样的:
ALTER TRIGGER [dbo].[tblMediaAfterInsertOrUpdate]
ON [dbo].[tblMedia]
BEFORE INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON
DECLARE @IdMedia INTEGER,
@NewSubject NVARCHAR(200)
SELECT @I
我需要在一个表上创建一个update触发器,如果存在某些插入的值,它还会更新表。这个是可能的吗?我已经尝试过了,当插入的值存在并触发触发器时,触发器执行更新并再次触发自身。最终-死结。有没有办法安全地做到这一点呢?
代码:
CREATE TRIGGER dbo.trg_updateaddress on dbo.Customers
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @original_source varchar(50)
SELECT @original_source = address_source
我正在尝试创建一个触发器,它将更新成绩更新的学生的所有朋友的成绩。
create trigger upgrade
after update on Highschooler
when new.grade=old.grade+1 and trigger_nestlevel() < 2
begin
update Highschooler
set grade=new.grade
where ID in (
select ID2
from Friend
where ID1=old.ID
)
;
end
朋友的朋友(朋友的……)被
我得到了以下两个触发器,每个触发器单独工作,但它们在一起不起作用。
我怎样才能让他们一起工作?它们更新表中的不同字段。
触发1:
create trigger wys_sk_u after update on `things`
for each row
begin
UPDATE `current` s
INNER JOIN things u ON s.id_thing = u.id_thing
INNER JOIN dude_base b ON b.id= s.id
SET s.`curr_cash` = u.cash1 * b.cash2/ 100;
end;
$$
触发2:
create
我有下表
CREATE TABLE ex(
id INTEGER PRIMARY KEY,
dat DATE NOT NULL CHECK(dat IS date(dat))
);
我希望在每次插入时都自动设置dat日期(“现在”)。这就是为什么我创建了一个触发器
CREATE TRIGGER setTrigger
AFTER INSERT
ON ex
FOR EACH ROW
BEGIN
UPDATE ex
SET dat = date('now')
WHERE id = NEW.id;
我正在尝试在sqlite中实现与“equivalent CURRENT_TIMESTAMP”MySQL特性相当的功能。我的想法是用这样的触发器:
CREATE TRIGGER last_update_trigger
AFTER UPDATE
ON mytable
FOR EACH ROW
BEGIN
UPDATE mytable SET last_update = CURRENT_TIMESTAMP WHERE id = old.id;
END
但这有个问题。每次在此表的记录上发生更新时,触发器都会在同一记录上触发一个新的更新。这应该会一次又一次触发触发器,从而导致无限循环的更新。
这真的会发
原因是什么?在同一DB上,select语句按预期工作:
select id from line where line.id = 298;
但以下delete语句失败:
delete from line where line.id = 298;
有错误:
Unknown column 'line_id' in 'where clause'
查询输出:
mysql> delete from line where line.id = 298;
ERROR 1054 (42S22): Unknown column 'line_id' in '
我有触发器UPDATETRIGGER在测试上,
它是为了在更新测试表时被调用而编写的。
现在,在这个中,UPDATETRIGGER正在更新同一个测试表的一个列。
这是递归的吗?
我的触发器和表在MS数据库中。从表值中我看到它不是这样发生的,请任何人解释一下。
USE [TESTING]
GO
/****** Object: Trigger [dbo].[UPDATETRIGGER] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[UPDATETRIGGER] on [dbo].[TES
我有一个MYSQL数据库,其表如下:
Id myId Description
ABD1 0 some desc
ABD2 1 some desc
....
myId是一个自动递增的列。我需要创建一个mysql触发器,防止任何人在插入时更改分配给行的第一个myId值。如何在mysql中做到这一点?我在想:
CREATE TRIGGER upd_check BEFORE UPDATE ON myTable
FOR EACH ROW
BEGIN
NEW.myId = OLD.myID
END
够了吗?如果是这
我需要更新我的库存,每当我们购买一个产品,这个数量需要添加到我的股票。我是通过mysql进行这一更新的,我有两个表"detalledecompra“,其中我们购买了一个产品,而"productos”是库存,它包含了产品id、描述、数量等。我想创建这个触发器:
CREATE TRIGGER UPDATESTOCK AFTER INSERT ON detalledecompra
FOR EACH ROW
BEGIN
UPDATE productos
SET productos.StockActual = StockActual + detalledecompra.Cantida
让我们使用一个测试表:
CREATE TABLE labs.date_test
(
pkey int NOT NULL,
val integer,
date timestamp without time zone,
CONSTRAINT date_test_pkey PRIMARY KEY (pkey)
);
我有一个触发器函数,定义如下。该函数用于将日期插入到表中指定的列中。它的参数是主键、日期字段的名称和要插入的日期:
CREATE OR REPLACE FUNCTION tf_set_date()
RETURNS trigger AS
$BODY$
DECLARE
我需要通过R代码在sql server中创建一个触发器,为此我需要将sql分隔符设置为//。我尝试了以下操作: dbExecute(con, "delimiter //") dbExecute(con, "delimiter //\n") dbExecute(con, "delimiter //\t") 我还使用其他DBI函数尝试了上面的场景 dbGetQuery和dbSendQuery 但是我得到了下面的错误。 could not run statement: You have an error in your SQL syntax; che
我有一张桌子,上面有lat,lng和删除标志。它的MariaDB 5.3..。
如果有人插入一个值“接近现有的项目”,我希望它被拒绝或删除标志设置。
我以为我可以用扳机做这件事??在看来只有有限的触发能力的mysql中,这是可能的吗?
CREATE TABLE `test` (
`lat` decimal(10,8) NOT NULL,
`deleted` decimal(11,0) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TRIGGER mytrigger
BEFORE INSERT
ON test FOR
我有一个站点,当我在数据库中更改值并按enter键时,我可以通过单击表来更新行的日期。
我想要的:在日期字段中。只需输入mm/dd (例如05-20),按enter键。
那么我的触发器应该是:
CREATE TRIGGER before_transactions_update
BEFORE UPDATE
ON Transactions FOR EACH ROW
BEGIN
-- variable declarations
declare inputDate integer;
-- trigger code
-- get month and day
-- LEFT(inputD
这周我遇到了一个问题(谢天谢地,我用更好的方法解决了这个问题);
我需要在数据库中保持几个字段不变。
因此,我编写了一个脚本,在表上放置一个触发器,在进行插入或更新时,该脚本将值设置为预设的数字。
数据库运行在VMS上(但我想知道SQLServer的相似之处)。
以下是触发因素:
drop trigger my_ins_trig;
drop trigger my_upd_trig;
!
!++ Create triggers on MY_TABLE
CREATE TRIGGER my_ins_trig AFTER INSERT ON my_table