在我的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)