6

月と年の2つの別々の列を使用するコードを少し作成しようとしています。そこから、入力した数字がすでに過ぎているかどうかを確認したいのです。それらが渡された場合、エラーが渡されてトランザクションが停止されます。それ以外の場合は、続行して新しい情報をテーブルに挿入します。私はこれを機能させることに近づいていることを知っていますが、RAISERROR を起動させることはできません。私はこれにかなり慣れていないという事実と関係があると確信しており、いくつかの小さな詳細が欠けています.

現在、2 か月を変数として取り、他の 2 か月を適切な日時形式に変換するために使用する 3 番目の変数を作成しています。次に、datediff 関数を使用して、そのように通過したかどうかを確認します。しかし、役に立たない。カードの日付が古くても、挿入機能を使い続けています。

USE AdventureWorks2012
GO

CREATE TRIGGER BadCreditCardDate
ON Sales.CreditCard
INSTEAD OF INSERT
AS
Begin
DECLARE @ExpMonth tinyint,
        @ExpYear smallint,
        @ExpMonthYear datetime

SELECT  @ExpMonth=ExpMonth, 
        @ExpYear=ExpYear,
        @ExpMonthYear = @ExpYear + '-' + @ExpMonth + '-00' 
FROM INSERTED
    IF
    DATEDIFF(MONTH,@ExpMonthYear,GETDATE()) < 0
    BEGIN
        RAISERROR ('The Credit Card you have entered has expired.' ,10,1)
        ROLLBACK TRANSACTION
    END 

ELSE    
Begin
    INSERT INTO CreditCard (CardType, CardNumber, ExpMonth, ExpYear, ModifiedDate)
    Select CardType, CardNumber, ExpMonth, ExpYear, ModifiedDate FROM inserted
END
End
4

1 に答える 1