加入收藏 | 设为首页 | 会员中心 | 我要投稿 武陵站长网 (https://www.50888.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

Sql server SQL Server:如果存在,则触发多个

发布时间:2022-10-30 13:31:13 所属栏目:MsSql教程 来源:转载
导读: Sql server SQL Server:如果存在,则触发多个
sql-server
Sql server SQL Server:如果存在,则触发多个,sql-server,Sql Server,我有一个触发器设置,下面我有两个问题代码听起来像吗如果更

Sql server SQL Server:如果存在,则触发多个

sql-server

Sql server SQL Server:如果存在,则触发多个,sql-server,Sql Server,我有一个触发器设置,下面我有两个问题代码听起来像吗如果更新中存在另一个,我如何嵌套它。基本上,我希望它捕获另一列Mssq触发器,具体取决于组件名称是“x”还是“y”特别是,如果名称为“x”,我想更新JobStart=jr.start;如果名称为“y”,我想更新JobEnd=jr.endALTER TRIGGER [dbo].[T_trigger_IU] ON [dbo].[tableA] AFTER INSERT, UPDATEAS BEGIN TRAN-- SET NOC

我有一个触发器设置,下面我有两个问题

代码听起来像吗

如果更新中存在另一个,我如何嵌套它。基本上,我希望它捕获另一列,具体取决于组件名称是“x”还是“y”

特别是,如果名称为“x”,我想更新JobStart=jr.start;如果名称为“y”,我想更新JobEnd=jr.end

ALTER TRIGGER [dbo].[T_trigger_IU]
   ON  [dbo].[tableA]
   AFTER INSERT, UPDATE
AS 
BEGIN TRAN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    -- Insert statements for trigger here
    IF EXISTS (select * from inserted i

电表倒转器操作说明书民用电表调表器倒表器_Mssq触发器_编发器盘发器时尚造型器

inner join jobmst jm on jm.jm_id = i.jm_id inner join [db2].[dbo].[table2] dm on dm.ID = i.jr_id where i.jr_owner = 913 and jm.jm_name LIKE '%.%' and jm.jm_name NOT LIKE '.%') BEGIN UPDATE [db2].[dbo].[table2] SET RefreshTm = GETDATE(), StatID = i.jr_status, ComponentID = jrchild.jr_id, ComponentName = jmchild.jm_name, ComponentStatus = jrchild.jr_status FROM inserted i inner join jobrun jr on jr.jr_id = i.jr_id inner join jobrun jrchild on jrchild.jr_prntid = i.jr_id inner join jobmst jmchild on jmchild.jm_prntid = i.jm_id inner join [db2].[dbo].[table2] dm on dm.ID = i.jobrun_id where i.jr_id = dm.ID END ELSE BEGIN INSERT INTO [db2].[dbo].[table2] (CreateTm, Date, Name, DefID, Cal, CalID, PStart, PEnd, ID, StatID) SELECT GETDATE(), i.jr_proddt, jm.jm_name, i.jm_id, em.em_name, em.em_id, jd.jd_fromtm, jd.jd_untiltm, i.jr_id, i.jr_status FROM jobrun jr inner join inserted i on i.jr_id = jr.jr_id inner join jobmst jm on jm.jm_id = i.jm_id inner join evntmst em on em.em_id = jm.em_id inner join jobdtl jd on jd.jd_id = jm.jd_id where i.jr_owner = 913 and jm.jm_name LIKE '%.%' and jm.jm_name NOT LIKE '.%' END COMMIT TRAN

对于初学者:我个人更喜欢有两个单独的触发器-每个操作一个-而不是必须做大量的检查来决定使用哪个代码路径。第二:不要在触发器中使用BEGIN TRAN…COMMIT TRAN!触发器已在导致触发此触发器的语句已启动的环境事务中运行。因此,如果我读取此正确信息,您建议1个触发器用于If exists更新,1个触发器用于If not exists插入?我直接从这里得到的begin tran-随着推理的改变?我担心的是要做我想做的事情通过这种方法我将有50多个触发器,但是是的,隔离坏的触发器会更好,但是将整个过程包含在一个触发器中以限制数据库查找不是更好吗?是的,我将有一个触发器用于更新,另外还有一个单独的INSERT,这样您就可以提前知道您正在处理更新和/或INSERT,并且不需要太多的检查代码。关于交易的推理没有改变-你可能只是误解了那些答案-他们没有处理触发器-在触发器中,您已经在导致触发的语句的环境事务中了-让该事务更清楚地完成它的工作,并且有意义,坦率地说,我喜欢将代码分开,所以我不会抱怨。问题只是有多个触发器要过滤,所以我必须仔细研究如何有效地命名它们。这非常适合thnx。现在,我的延迟不是如何将所有触发器链接到一个触发器,而是如何命名它们以便正确组织:

(编辑:武陵站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!