在我的sql代码中,我传递了一堆神奇的数字: -
AnimalType TINYINT
/*
AnimalType can be one of the following :-
1. Cat
2. Dog
3. Bird
....
*/
Run Code Online (Sandbox Code Playgroud)
无论如何我可以使这个自定义类型/枚举.例如.
AnimalType ANIMAL
Run Code Online (Sandbox Code Playgroud)
并且它被限制为包含1 < - >之间的数字(例如,在我上面的例子中为3).
或约束到字符串.例如.AnimalType ='猫'等等?
干杯!
我知道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
Run Code Online (Sandbox Code Playgroud)
一个SELECT
可能的语句使用UDF像这样:
SELECT A.AnimalName, dbo.ihAnimalTypeDesc(A.AnimalType)
FROM Animals A
Run Code Online (Sandbox Code Playgroud)
如果动物属于特定类型,则返回true或false的UDF:
CREATE FUNCTION IsCat
(
@AnimalType INT
)
RETURNS BIT
AS
BEGIN
IF @AnimalType IS NULL
RETURN NULL
IF @AnimalType = 1
RETURN 1
RETURN 0
END
Run Code Online (Sandbox Code Playgroud)
以下是使用上述UDF的示例.注意:在WHERE
子句中执行此操作时,您必须小心性能问题:
SELECT AnimalName
FROM Animals
WHERE dbo.IsCat(AnimalType)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11554 次 |
最近记录: |