我正在尝试编写一些代码,这些代码需要两个单独的列(一个月和一年)。从那里,我希望它查看输入的数字是否已经通过。如果它们已通过,则导致错误通过并停止事务。否则,我希望它继续并将新信息插入表中。我知道我即将使它起作用,但是我似乎无法启动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
Run Code Online (Sandbox Code Playgroud)