加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 我可以在Sql Server中有自定义枚举数据类型吗?

发布时间:2020-12-12 16:55:00 所属栏目:MsSql教程 来源:网络整理
导读:在我的sql代码中,我传递了一大堆魔术数字: AnimalType TINYINT/* AnimalType can be one of the following :- 1. Cat 2. Dog 3. Bird ....*/ 有没有,我可以使这是一个自定义类型/枚举. 例如. AnimalType ANIMAL 并且它被限制为包含1 – 无论(例如我上面的例
在我的sql代码中,我传递了一大堆魔术数字:
AnimalType TINYINT

/*
  AnimalType can be one of the following :-
  1. Cat
  2. Dog
  3. Bird
 ....
*/

有没有,我可以使这是一个自定义类型/枚举.
例如.

AnimalType ANIMAL

并且它被限制为包含1 – 无论(例如我上面的例子中的3).

或约束到字符串.例如. AnimalType =’Cat’.. etc?

干杯!

编辑

我知道LookUp表是什么.这不是查找表,而是一些数据传递给一些存储过程.而不是传入魔术数字,我希望传递一个枚举或至少一些禁忌的号码(例如号码1 – 5)等…

解决方法

没有枚举类型.但是,您可以创建用户定义的函数来在您映射到枚举值的INT之间来回转换.

为了生成基于“INT”的AnimalType的友好名称,您可以执行以下操作:

UDF生成友好的名字:

CREATE FUNCTION ihAnimalTypeDesc
(
    @AnimalType INT
) 

RETURNS VARCHAR(20)
AS  
BEGIN 
    IF @AnimalType IS NULL
    RETURN NULL

    DECLARE @Temp AS VARCHAR(20)

    SET @Temp = CASE @AnimalType
    WHEN 1 THEN 'Cat'
    WHEN 2 THEN 'Dog'
    WHEN 3 THEN 'Snake'
    END

    RETURN @Temp
END

SELECT语句可以像这样使用UDF:

SELECT A.AnimalName,dbo.ihAnimalTypeDesc(A.AnimalType)
FROM Animals A

如果动物是特定类型,则UDF返回true或false:

CREATE FUNCTION IsCat
(
    @AnimalType INT
) 

RETURNS BIT
AS  
BEGIN 
    IF @AnimalType IS NULL
        RETURN NULL

    IF @AnimalType = 1
        RETURN 1

    RETURN 0
END

以下是使用上述UDF的示例.注意:在WHERE子句中,必须注意性能问题:

SELECT AnimalName
FROM Animals
WHERE dbo.IsCat(AnimalType)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读