繁体   English   中英

如果在更新语句上声明而不是触发器?

[英]If statement on update statement Instead of trigger?

我有一个存储过程,通过合并表“ tablea”中的一些表和更新来计算因子。 我在tablea上创建了一个触发器,所以当有更新时,这些记录将输入到新表'tablea_new'中。 我的触发器问题是我一次要更新6个月的因子,但有些月份因子可能没有更新,但应将它们输入到新表中。因此,触发器使我很烦恼。

所以我用了一个If语句来插入更新记录

我的If语句代码是

@Action A
SET A.Factor=B.Net/B.Cost,A.Net=B.Net,A.LastModified=sysDatetime(),A.LastModifiedBy=suser_name(),A.Path=B.Path
FROM Tablea A
INNER JOIN ##TEMP3 B ON
A.Year=B.Year AND
A.Month=B.Month AND
A.Media=B.Media
 IF @Action='UPDATE'
   BEGIN


   INSERT INTO Tablea_New (ID,Media,Year,Month,Factor,Net,UpdatedDate,UpdatedBy,FilePath)
SELECT ID,Media,Year,Month,Factor,Net,LastModified,LastModifiedBy,FilePath FROM Tablea
WHERE Media='CNN'AND YEAR=@YEAR AND Net >1
END

你们能给我一些建议吗,我可以做一些修改还是需要使用触发器:(

您可以使用SQL Server 2008 R2中的更改数据捕获(CDC)功能。 这将帮助您自动存储所有更改的行,而不管更改的类型(即,是插入,更新还是删除)。

要为您的数据库启用CDC,请使用以下脚本

USE your_database_name
GO 
EXEC sys.sp_cdc_enable_db

要为您的表启用CDC,请使用以下脚本

EXEC SYS.sp_cdc_enable_table 
@source_schema = N'your_schema_name',
@source_name = N'your_table_name',
@role_name = NULL

启用CDC后,将在模式“ cdc”下创建一个新表来存储更改的行以及有关更改的元数据。 您可以直接访问该表以获取所需的数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM