小编Mik*_*eyZ的帖子

触发RAISERROR和ELSE案例问题

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

sql-server triggers datediff raiserror

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

datediff ×1

raiserror ×1

sql-server ×1

triggers ×1