月と年の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