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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |