Sql server 如何在sql server中将性别区分为男性和女性,同时将性别的数据类型设置为INT

Sql server 如何在sql server中将性别区分为男性和女性,同时将性别的数据类型设置为INT,sql-server,Sql Server,我想在数据库中将性别区分为男性和女性,我用于性别的数据类型是INT Gender ------ 1 2 像这样记录数据 Gender ------ Male Female 现在,我希望将此表单中的数据保存在存储过程中。使用CASE: CREATE TABLE Users( ID INT, Name NVARCHAR(45), Gender BIT ); INSERT INTO Users VALUES (1, N'User1', 1),

我想在数据库中将性别区分为男性和女性,我用于性别的数据类型是INT

Gender    
------      
1
2
像这样记录数据

Gender
------
Male
Female
现在,我希望将此表单中的数据保存在存储过程中。

使用
CASE

CREATE TABLE Users(
    ID INT,
    Name NVARCHAR(45),
    Gender BIT
    );

INSERT INTO Users VALUES
(1, N'User1', 1),
(2, N'User2', 0);

SELECT *,
       CASE Gender
       WHEN 1 THEN 'Male'
       WHEN 0 THEN 'Female'
       ELSE
       'Unknown' END
FROM Users;
结果:

+----+-------+--------+--------+
| ID | Name  | Gender | Gender |
+----+-------+--------+--------+
|  1 | User1 | True   | Male   |
|  2 | User2 | False  | Female |
+----+-------+--------+--------+

数据类型是一种整数数据类型,其值可以为
1
0
,或
NULL
,您可以对位列使用0或1 如果您提供一个类似于2的值,那么它将作为1存储在表列中 所以只使用0和1是很重要的

我用0表示女性数据,1表示男性数据

这是存储过程代码

create procedure PeopleByGender (
        @gender bit -- 1 male, 0 female
    )
    as
    if @gender is null
        --select * from people 
        select * from people where gender is null
    else
        select * from people where gender = @gender
    go
下面是如何按存储过程列出女性

exec PeopleByGender 0

这将起作用:

选择
IIF(性别为空,'其他',IIF(性别=1,'男性','女性'))性别

来自用户

我不明白问题是什么,你能再扩展一点吗?我真的希望你的双关语是有意的,@HoneyBadger:)你说你的数据是
,但是
不能存储值
2
。(不可为空)
位只能具有值
0
1
。您如何存储值
2
?@Larnu很高兴有人捡到它;)@Larnu请原谅,数据类型是INT。@GuidoG Mybe列是
非空的
@GuidoG好的,现在最好不要这样,如果列的性别是空的怎么办?在这种情况下,您的过程无法获取所有为nullHi GuidoG的内容,我修改了其中的存储过程。请查收。感谢您注意空选项,如果您将空作为参数传递,那么现在您将返回所有人。也许这是有意的,也许不是。我们不知道OP给了我们多少信息。在这种情况下,我会返回所有性别为null的人,也许我们可以将null情况下的IF子句更改如下:IF@gender is null select*from people where gender is null这与Sami最初的问题/假设相同。如果
Gender
的值为
NULL
(或不是1),则此人将始终为女性。考虑到OP将值
2
存储在“
bit
”数据类型中(
2
不能存储在
bit
),它们很可能具有除
1
2
之外的一系列值。