用户定义的函数来检查 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 个游戏的主要内容,如果未能解决你的问题,请参考以下文章

(PL/)SQL 查看超过 3 个表,用户名和密码

两个表作为用户定义函数的参数

如何检查用户是不是在文本字段中输入了超过 1 个小数?

正则表达式:检查是不是有超过 x 个换行符

检查变量是不是为函数类型

wordpress 插件 -> 调用未定义的函数 wp_get_current_user()