我有一个存储过程,我将通过合并表'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
你能给我一些建议吗?我可以做一些修改,或者我需要使用触发器:(
答案 0 :(得分:1)
您可以使用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”下创建一个新表,以存储已更改的行以及有关更改的元数据。您可以直接访问此表以获取所需数据。