【发布时间】:2011-11-03 01:08:38
【问题描述】:
我想写触发器。当 table1 中有条目时,table2 应该插入相同的值。并且在 table1 中的某些字段被更新,那么相应的字段必须在 table2 中更新。如何知道值是插入还是更新?
我正在使用插入来插入值。
请指导我。
【问题讨论】:
标签: sql-server-2005
我想写触发器。当 table1 中有条目时,table2 应该插入相同的值。并且在 table1 中的某些字段被更新,那么相应的字段必须在 table2 中更新。如何知道值是插入还是更新?
我正在使用插入来插入值。
请指导我。
【问题讨论】:
标签: sql-server-2005
您可以通过以下方式知道值是在触发器中插入还是更新,如下所示:
INSERT 上,inserted 动态表填充了新值UPDATE 上,inserted 动态表填充了已更新记录的新值,deleted 动态表填充了已更新记录的旧值所以基本上,如果deleted 表包含inserted 表中的id(假设您有一个id 列),那么您可以确定是UPDATE 导致了触发器。如果deleted 表为空,则相反,它是INSERT。
【讨论】:
inserted 和deleted 表才能真正知道触发器是从INSERT 还是UPDATE 发生的。有意义吗?
CREATE TABLE 批次的table1 和table2 吗?我将编写触发器以向您展示我的思路。请编辑您的问题以包含此内容。
使用此触发器来解决您的问题..
创建触发器 [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)
设置错误;
结束
【讨论】: