【问题标题】:How to write trigger to insert and update another table如何编写触发器来插入和更新另一个表
【发布时间】:2011-11-03 01:08:38
【问题描述】:

我想写触发器。当 table1 中有条目时,table2 应该插入相同的值。并且在 table1 中的某些字段被更新,那么相应的字段必须在 table2 中更新。如何知道值是插入还是更新?

我正在使用插入来插入值。

请指导我。

【问题讨论】:

    标签: sql-server-2005


    【解决方案1】:

    您可以通过以下方式知道值是在触发器中插入还是更新,如下所示:

    • INSERT 上,inserted 动态表填充了新值
    • UPDATE 上,inserted 动态表填充了已更新记录的新值,deleted 动态表填充了已更新记录的旧值

    所以基本上,如果deleted 表包含inserted 表中的id(假设您有一个id 列),那么您可以确定是UPDATE 导致了触发器。如果deleted 表为空,则相反,它是INSERT

    【讨论】:

    • 我在 INSERT、UPDATE 之后写过并且我正在使用插入的动态表,是否正确?
    • @user998533 根据我的回答,您需要在触发器中同时使用inserteddeleted 表才能真正知道触发器是从INSERT 还是UPDATE 发生的。有意义吗?
    • 我已经这样写了,插入后在table1上创建触发器TestTrigger,更新为插入到table2中选择*从插入到这里...从插入到那里所以我应该从插入,删除......对?????
    • @user998533 你能告诉我CREATE TABLE 批次的table1table2 吗?我将编写触发器以向您展示我的思路。请编辑您的问题以包含此内容。
    【解决方案2】:

    使用此触发器来解决您的问题.. 创建触发器 [dbo].[insert_Assets_Tran]
    开启 [dbo].[AssetMaster]
    插入后,更新
    开始
    声明@isnum TINYINT;

    SELECT @isnum = COUNT(*) FROM 已插入;

    如果 (@isnum = 1)
    插入资产交易
    选择 [AssetId],[Brandname],[SrNo],[Modelno],[Processor],[Ram],[Hdd],[Display],[Os],[Office],[Purchasedt] ,[Expirydt],[Vendor],[VendorAMC],[Typename],[LocationName],[Empid],[CreatedBy],[CreatedOn],[ModifiedBy] ,[ModifiedOn],[Remark],[AssetStatus],[Category],[Oylstartdt],[Oylenddt],[配置] ,[AStatus],[Tassign]

    FROM 插入;
    其他
    RAISERROR('某些字段未提供', 16, 1)
    设置错误;
    结束

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多