在SQL Server中是否可以使用固定的可枚举参数定义用户定义的函数?
像SQL Server中的许多预定义函数一样,例如DATEDIFF
,它们将DAY,MONTH等作为第一个参数,但是这些不是char或任何其他数据类型...
我认为在互联网上找到答案应该很容易,但是我不知道我应该确切搜索什么。
答案 0 :(得分:1)
在这种意义上,SQL Server没有常量或枚举。函数或过程的参数需要传入字符串,数字或变量。
是的,这不同于直接在内置函数和其他T-SQL结构中使用定义明确的常量的功能。也许这是我们在语言的未来发展中将会看到的,但这就是我们今天所拥有的。
对于DATEADD
之类的事物,您正在传递标识符 ...请注意,这些方法可以起作用:
SELECT DATEADD([DAY], 1, GETDATE());
SELECT DATEADD("DAY", 1, GETDATE());
但这将失败:
SELECT DATEADD('DAY', 1, GETDATE());
有趣的是,这也会失败(只是进一步的证据,证明它像标识符一样被处理):
SET QUOTED_IDENTIFIER OFF;
SELECT DATEADD("DAY", 1, GETDATE());
您不能编写自己的将标识符作为输入的函数或过程-它们总是被解释为隐式转换的字符串(如EXEC sp_who active;
),或者它们只是失败了解析检查(如上) )。内置和用户定义函数 的输入参数将带有表达式,而过程则不会。