【问题标题】:How to get All bit field value in SQL Server in stored procedure如何在存储过程中获取 SQL Server 中的所有位字段值
【发布时间】:2015-02-28 23:39:18
【问题描述】:

我一直在寻找,但仍然没有找到最好的方法

我有一个带有 sex 列 (bit) 的表,所以值将是 1/0/null

我的带有参数@sex的存储过程

 SELECT * 
 FROM [dbo].[data] 
 WHERE sex = ISNULL(@sex, sex)

当我发送@sex null 时,查询只给我所有性别字段为真和假但不为空的数据

有人可以给我一种获得所有价值的方法吗?真假空?

我正在尝试使用 case 但不起作用,帮帮我

我上次评论的存储过程

select   
    [idUser],   
    [sex] 
FROM    
    [dbo].[data] 
WHERE   
    (@sex IS NULL AND sex is null)
    OR (@sex IS NOT NULL AND sex = @sex)

【问题讨论】:

    标签: sql-server stored-procedures where bit


    【解决方案1】:

    试试这个.. 将 @sex 分配为 0,1 或 null

    CREATE TABLE #TEMP(ID INT, SEX BIT)
    INSERT INTO #TEMP VALUES(1,1)
    INSERT INTO #TEMP VALUES(2,1)
    INSERT INTO #TEMP VALUES(3,0)
    INSERT INTO #TEMP VALUES(4,0)
    INSERT INTO #TEMP VALUES(5,NULL)
    
    DECLARE @sex BIT
    SET @sex=NULL
    
    SELECT * FROM #TEMP WHERE @sex IS NULL or sex=@sex
    DROP TABLE #TEMP
    

    【讨论】:

    • Where 子句将评估任何布尔条件。如果 "@sex" 为 NULL,那么 where 子句将始终返回 true,从而有效地忽略参数。如果“@sex”不为 NULL,那么它将在 OR 的右侧求值,并根据参数检查表中的值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 2013-06-11
    相关资源
    最近更新 更多