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

ためのいくつかの提案をしてください、私はあなたが更新トリガーを作成しているが、あなたの代わりに挿入されたテーブルの(また、マジックテーブルと呼ばれる)削除されたテーブルを使用していると思います。 このリンクを参考にしてくださいhttps://www.mindstick.com/Articles/12187/use-of-dml-dll-and-logon-trigger-in-sql

また、挿入がある条件の基礎であるため、「トリガーの代わりに」という概念を使用することができます。

0

使用このSELECT *削除されたSELECT * FROMを入れINSTEAD FROM