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

前端之家收集整理的这篇文章主要介绍了sql-server – 我可以在Sql Server中有自定义枚举数据类型吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的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)

猜你在找的MsSQL相关文章