我在理解以下存储过程时遇到了一些困难。
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。这些都是位变量。为什么“批准”在过程中被声明为位=空,isnull(Approved, 0)是什么意思?基本上,我试图修改这个过程,以调用列“已批准”的所有行,其值为“null”。
发布于 2014-06-17 10:59:06
在SQL中可以看到@SomeName,它是一个变量。因此,@Approved bit = null正在创建一个变量,并将其值设置为NULL (只是将其初始化为某些默认值)。我猜该变量随后会在其他点设置为TRUE / FALSE或NULL。这段代码没有显示在您的代码段中,但是假设在第一个......部分中。
然后,在有isnull(Approved, 0)的地方,它的意思是如果Approved是NULL,那么返回值0 (FALSE)而不是NULL。
其想法是Approved既可以是TRUE,也可以是FALSE,并将NULL视为FALSE。
这就引出了一个问题:为什么允许它在数据库中为空,但这可能超出了这个问题的范围。
发布于 2014-06-17 11:11:08
为什么“批准”表示为bit = null
这是参数的默认值。如果在没有该参数的情况下调用该过程,它将使用默认值。
空(批准,0)是什么意思?
这意味着选择了Approved字段的值,如果该值是null,则返回0值。
我试图将这个proc修改为调用所有列“已批准”的行,其值为“null”。
为此,您将向查询添加如下条件:
where Approved is null如果要使用@Approved参数进行比较,并允许null值从表中获取所有null值,则可以使用:
where (@Approved is null and Approved is null) or (Approved = @Approved)https://stackoverflow.com/questions/24261965
复制相似问题