gpt4 book ai didi

sql-server - 使用 RAISERROR 和 ELSE 大小写问题触发

转载 作者:行者123 更新时间:2023-12-03 14:19:24 25 4
gpt4 key购买 nike

我正在尝试编写一些包含 2 个单独列、一个月和一年的代码。从那里我希望它查看输入的数字是否已经通过。如果它们已通过,则导致错误通过并停止事务。否则,我希望它继续并在表中插入新信息。我知道我快要让它发挥作用了,但我似乎无法触发 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

最佳答案

我认为有一种更简单的方法来检查是否过期:

CREATE TRIGGER BadCreditCardDate
ON Sales.CreditCard
INSTEAD OF INSERT
AS
BEGIN
IF EXISTS (
SELECT 1
FROM inserted
WHERE (YEAR(GETDATE()) > ExpYear) OR (YEAR(GETDATE()) = ExpYear AND MONTH(GETDATE()) > ExpMonth)
)
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

通过这种方式,您可以有效地检查要插入 CreditCard 中的每条记录。 .

关于sql-server - 使用 RAISERROR 和 ELSE 大小写问题触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28140138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com