2016-11-24 104 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