我正在尝试编写一些代码,这些代码包含两个单独的列,一个月和一年。从那里我希望它查看输入的这些数字是否已经通过。如果它们已经通过,则导致错误通过并停止事务。否则,我希望它继续并在表中插入新信息。我知道我快要让它工作了,但我似乎无法触发 RAISERROR。我确信这与我在这方面很新的事实有关,我错过了一些小细节。
目前,我将两个月作为变量,并制作第三个变量以将其他两个变量转换为适当的日期时间格式。然后我使用 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