用户定义的函数来检查 Rent 是不是有超过 3 个游戏
Posted
技术标签:
【中文标题】用户定义的函数来检查 Rent 是不是有超过 3 个游戏【英文标题】:User defined Function to check if Rent has more then 3 games用户定义的函数来检查 Rent 是否有超过 3 个游戏 【发布时间】:2022-01-20 08:05:08 【问题描述】:您可以如何帮助我解决以下问题。我们想使用 Powerbi 来获取报告,但首先我们想在我们的数据库上实现 constraint
。因为这个约束需要检查另一个表,所以我们要使用用户定义的函数。
该功能必须检查是否有超过 3 个游戏被租用。要查看产品(Artikel)是游戏还是控制台,我们使用列 SPEL_OF_CONSOLE。
如何在函数中看到这一点。
我写了这个函数:
这个函数是我写的
(@HUUROVEREENKOMSTNR INT)
RETURNS BIT --1 or 0
AS
BEGIN
DECLARE @Returnvalue bit =1;
IF COUNT(*) = 3(
SELECT v.[Barcode] FROM VERHUURDE_ARTIKELEN v INNER JOIN ARTIKEL A on v.[BARCODE] = A.[BARCODE]
WHERE @HUUROVEREENKOMSTNR = v.[HUUROVEREENKOMSTNR]
AND [SPEL_OF_CONSOLE] = 'SPEL'
)
SET @Returnvalue = 1;
ELSE SET @Returnvalue = 0;
END;
GO
但是我得到以下错误:
Incorrect syntax near the keyword 'ELSE'.
【问题讨论】:
您使用的是哪个 dbms? (上面的代码是特定于产品的。) 这部分查询看起来有误:IF COUNT(*) = 3(
。您可能想做一些类似 IF (SELECT COUNT(v.[Barcode]) FROM ...) >= 3` 的事情。但是,正如@jarlh 评论的那样,语法将取决于您使用的系统,因为 SQL 的不同方言是特定于供应商/系统的。
@jarlh 我正在使用微软 SQL
【参考方案1】:
我无法更正您的查询,它有很多错误,所以我会尝试给您一些可能对您有帮助的查询
要获取特定 huurovereenkomst 的游戏数量,您可以使用这样的查询
declare @VerhuurOvereenKomst int = 123
select count(1)
from VERHUURDE_ARTIKELEN va
inner join ARTIKEL a on va.BARCODE = a.BARCODE
and a.SPEL_OR_CONSOLE = 'spel'
where va.HUUROVEREENKOMST = @VerhuurOvereenKomst
让我们测试一下这个理论
首先我们做一些测试数据
DECLARE @va table (HUUROVEREENKOMST int, barcode int)
declare @a table (barcode int, spel_of_console varchar(10))
insert into @va values (1, 1), (1, 2), (1, 3)
insert into @a values (1, 'spel'), (2, 'spel'), (3, 'spel')
现在我们可以测试查询了
declare @VerhuurOvereenKomst int = 1
select count(1)
from @va va
inner join @a a on va.BARCODE = a.BARCODE
and a.SPEL_OF_CONSOLE = 'spel'
where va.HUUROVEREENKOMST = @VerhuurOvereenKomst
是的,结果是3
现在你想把这个放在一个函数中,这是可以做到的。看看这个例子。
create function dbo.CheckGameCount(@VerhuurOvereenKomst int) returns bit as
begin
declare @Result bit
select @Result = case when count(1) >= 3 then 1 else 0 end
from VERHUURDE_ARTIKELEN va
inner join ARTIKEL a on va.BARCODE = a.BARCODE
and a.SPEL_OR_CONSOLE = 'spel'
where va.HUUROVEREENKOMST = @VerhuurOvereenKomst
return @Result
end
现在你有一个查询示例和一个返回结果的函数示例,我不知道你想用什么方式来建立你的约束,所以我不能写任何关于它的东西。
【讨论】:
以上是关于用户定义的函数来检查 Rent 是不是有超过 3 个游戏的主要内容,如果未能解决你的问题,请参考以下文章