首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用位变量调用列的存储过程。

使用位变量调用列的存储过程。
EN

Stack Overflow用户
提问于 2014-06-17 10:53:59
回答 2查看 170关注 0票数 1

我在理解以下存储过程时遇到了一些困难。

代码语言:javascript
复制
create procedure "abc.PersonReports"
    @PersonId int,
    @Approved bit = null
    ... 
    select 
       ID 'Id',
       StaffID 'Id',
       isnull(Approved, 0) 'Approved',
    ...

我使用以下方法调用该过程:

代码语言:javascript
复制
PersonReports = this.personService.GetPersonReports(id, personId, Approved = false)

当我查看数据库中的列'Approved‘时,它的值为'null’、0和1。这些都是位变量。为什么“批准”在过程中被声明为位=空,isnull(Approved, 0)是什么意思?基本上,我试图修改这个过程,以调用列“已批准”的所有行,其值为“null”。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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

这就引出了一个问题:为什么允许它在数据库中为空,但这可能超出了这个问题的范围。

票数 1
EN

Stack Overflow用户

发布于 2014-06-17 11:11:08

为什么“批准”表示为bit = null

这是参数的默认值。如果在没有该参数的情况下调用该过程,它将使用默认值。

空(批准,0)是什么意思?

这意味着选择了Approved字段的值,如果该值是null,则返回0值。

我试图将这个proc修改为调用所有列“已批准”的行,其值为“null”。

为此,您将向查询添加如下条件:

代码语言:javascript
复制
where Approved is null

如果要使用@Approved参数进行比较,并允许null值从表中获取所有null值,则可以使用:

代码语言:javascript
复制
where (@Approved is null and Approved is null) or (Approved = @Approved)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24261965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档