2016-11-24 124 views
-1

更新表值之后,这是我的代码我在我的触发变老StartDateUtc和EndDateUtc二更新后触发没有得到在触发

当我更新了我的价值的工作不错,但第二次的取旧值

首次 请给我一些建议吧

IF EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(N'[dbo].[NewsUpdateTrigger]')) 
    DROP TRIGGER [dbo].[NewsUpdateTrigger] 
    GO 
    CREATE TRIGGER [dbo].[NewsUpdateTrigger] 
      ON [dbo].[News] 
    FOR UPDATE 
    AS 
    BEGIN 


SET NOCOUNT ON; 
    DECLARE @EntityId INT 
    DECLARE @EntityName varchar(Max) 
    DECLARE @IsPublish bit 
    DECLARE @LanguageId int 
    DECLARE @StoreId int 
    DECLARE @InTime Datetime 
    SELECT @EntityName='News' 



        DECLARE @StatDate DateTime 
        DECLARE @EndDate DateTime 

        SELECT @EntityId = DELETED.Id FROM DELETED 
        SELECT @IsPublish = DELETED.Published FROM DELETED 
        SELECT @StatDate= DELETED.StartDateUtc FROM DELETED 
         SELECT @EndDate= DELETED.EndDateUtc FROM DELETED 

      IF  EXISTS (SELECT * FROM Incremental_Solr_Custom where EntityName='News' and EntityId = @EntityId) 
      BEGIN 
        --If StartDateUtc and EndDateUtc expire Manually Set the is Publish=False 
       IF  EXISTS (SELECT * FROM DELETED WHERE StartDateUtc NOT BETWEEN Cast(GETDate() as date) AND Cast(GETDate() as date) 
        AND Cast(GETDate() as date) NOT BETWEEN StartDateUtc AND EndDateUtc) 
      BEGIN 

        UPDATE Incremental_Solr_Custom SET SolrStatus =1,IsPublish=0 WHERE EntityId = @EntityId AND EntityName='News'; 
        Insert into TriggerTesterTable(ErrorMethodName)values(' If StartDateUtc and EndDateUtc expire Set the is Publish=False '+ cast(@StatDate as varchar) + ' '+cast(@EndDate as varchar)) 
      END 

        --StartDate and EndDate is Not expire Get From News Table 
      IF  EXISTS (SELECT * FROM DELETED WHERE StartDateUtc BETWEEN Cast(GETDate() as date) AND Cast(GETDate() as date) 
        OR Cast(GETDate() as date) BETWEEN StartDateUtc AND EndDateUtc) 
      BEGIN 
        SELECT @IsPublish = DELETED.Published FROM DELETED 
        UPDATE Incremental_Solr_Custom SET SolrStatus =1,[email protected] WHERE EntityId = @EntityId AND EntityName='News'; 
        Insert into TriggerTesterTable(ErrorMethodName)values('StartDate and EndDate is Not expire Get IsPublish from News '+cast(@StatDate as varchar) + ' '+cast(@EndDate as varchar)); 
      END 

    END 

END

+1

触发器是**供应商高度特异性** - 所以请添加标签到指定是使用了'mysql','postgresql' ,'sql-server','oracle'或'db2' - 或者其他的东西。 –

+0

那么我怎么能从更新表中获取值而不使用已删除 –

回答

0

使用这种SELECT * FROM INSTEAD你把SELECT * FROM DELETED