首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >触发器中的更新查询

问触发器中的更新查询
EN

Database Administration用户
提问于 2014-08-08 14:09:54
回答 2查看 2K关注 0票数 4

我有一个配置表:

表:refdatecol

代码语言:javascript
复制
id           int(11)
startdatecol varchar(100)
enddatecol   varchar(100)
datecolTable varchar(100)

此表保存用户配置的列名和表名。我正在使用来自refdatecol的数据构建一个查询运行时,并更新另一个表project_wbs。我使用的是动态SQL。这在程序中很好。

问题是:我希望在insert或update上将当前日期值提取到project_wbs中。很自然,我想用扳机。但是触发器不支持MySQL中的动态SQL。

所以我想从扳机上打电话给这个程序。后来我知道这是一个严格的不-不。

我有办法做到这一点吗?

我也愿意考虑完全重新设计这个用户可配置的日期。

更新

以下是存储过程:

代码语言:javascript
复制
create  procedure sp_project_date (_id int)
begin

set @_startdate ='';
set @_enddate ='';
set @_projectId = (select project_wbs.proj_projectId 
                   from   project_wbs project_wbs 
                   where  id = _id);

set @q = (select concat('select ', startdatecol, ' , ', enddatecol ,
                        ' into @_startdate, @_enddate  from ' , datecolTable , 
                        ' where project_ProjectId = ' , @_projectId) as 'query' 
          from refdatecol
          where id = (select p.cogsDateId 
                      from   project p 
                      where  p.projectId = @_projectId)
          );

prepare stmt from @q;
execute stmt;

UPDATE project_wbs 
SET    project_startdate = @_startdate, 
       project_enddate = @_enddate 
WHERE  id = _id;

DEALLOCATE PREPARE stmt;
EN

回答 2

Database Administration用户

发布于 2014-08-08 16:49:09

也许您可以使用一些用户定义的变量。我曾经对此写过一个答案:仅禁用一个表的触发器。我建议设置一个用户定义的变量来禁用触发器。

在这种情况下,如果只是更改SQL语句的参数值,则不需要动态SQL。如果要更改查询的表名和列名,则必须构造一些好的IF...THEN触发器中的块,如我的帖子所演示的。。如果有太多的表或太多的列名来创建IF...THEN块,那么就坚持使用存储过程方法。

票数 0
EN

Database Administration用户

发布于 2018-10-18 05:39:28

使用动态SQL和/或存储过程在project_wbs中插入记录。

向project_wbs on update和/或on insert添加一个或多个触发器。在触发器中,将project_wbs.Current_Date_Column_Name值设置为now()。

这就是全部。

动态SQL /存储过程负责更新业务数据,触发器只负责更新该表中的“当前日期/时间”列--无论何时插入/更新记录(无论什么时候满足您的要求)。

注:这将在任何SQL更新project_wbs中的数据时更新列。这可以接受吗?

堆栈交换中有另一个问题中的一些简单SQL,它向您展示了如何构造触发器(假设除了在任何/每个更新/插入上设置当前时间之外,没有其他逻辑)。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/73513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档