【问题标题】:If statement on update statement Instead of trigger?如果更新语句上的语句而不是触发器?
【发布时间】:2013-09-08 03:43:21
【问题描述】:

我有一个存储过程,我将通过合并一些表和表“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 tsql if-statement triggers sql-server-2008-r2


    【解决方案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”下创建一个新表来存储更改的行以及有关更改的元数据。您可以直接访问该表以获取所需的数据。

    【讨论】:

      猜你喜欢
      • 2015-05-07
      • 2013-09-09
      • 2013-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-25
      • 1970-01-01
      相关资源
      最近更新 更多