使用位变量调用列的存储过程
本文关键字:存储过程 调用 变量 | 更新日期: 2023-09-27 18:08:52
我在理解下面的存储过程时遇到了一点麻烦。
create procedure "abc.PersonReports"
@PersonId int,
@Approved bit = null
...
select
ID 'Id',
StaffID 'Id',
isnull(Approved, 0) 'Approved',
...
我使用下面的方法来调用这个过程:
PersonReports = this.personService.GetPersonReports(id, personId, Approved = false)
当我查看数据库中的列'Approved'时,它的值为'null', 0和1。这些被声明为位变量。为什么"Approved"在程序中被声明为bit = null, isnull(Approved, 0)
是什么意思?基本上,我试图改变这个过程,以调用列'批准'具有值'null'的所有行。
您在SQL中看到的@SomeName
是一个变量。所以@Approved bit = null
正在创建一个变量并将其值设置为NULL(只是初始化为一些默认值)。我猜变量然后在其他点设置为TRUE/FALSE或NULL。这段代码没有显示在您的代码片段中,因此假设在第一个......
部分中您有。
然后,在你有isnull(Approved, 0)
的地方,它说如果Approved
是NULL,那么返回值0 (FALSE)而不是NULL。
这个想法是Approved
可以是TRUE
或FALSE
,并将NULL
视为FALSE
。
这就引出了一个问题,那么为什么允许它在数据库中为空,但这可能超出了这个问题的范围。
为什么'Approved'表示为bit = null
是该参数的默认值。如果在不带该参数的情况下调用过程,它将使用默认值。
isnull(Approved, 0)是什么意思?
表示选择Approved
字段的值,如果该值为null
,则返回0
的值。
我试图改变这个过程调用所有行与列"已批准"的值为"null"
您可以在查询中添加如下条件:
where Approved is null
如果您想使用@Approved
参数进行比较,并允许null
值从表中获得所有null
值,那么您将使用:
where (@Approved is null and Approved is null) or (Approved = @Approved)