如何获得赋予MS SQL
函数或存储过程的参数数量?
让我们说亩功能是:
CREATE FUNCTION dbo.tst
(
@idINT ,
@StartDate DATETIME ,
@EndDate DATETIME
)
...
当我使用SELECT dbo.tst(1, '2015-11-11 23:14:45')
调用函数时,是否有办法确定仅使用两个参数调用函数?
编辑:
Idealy我希望有一个funtion / sp可以使用未知数量的参数,但据我所知这是不可能的。
我的想法是创建一个函数,让我们说20个参数并发现(计数)传递给函数的参数数量,这样我们就只能处理实际赋予函数的值。
更大的图景是在Data Vault 2.0中实现哈希函数,以便为每条记录创建哈希值以发现更改。由于每个表都有不同数量的字段,因此可以使用它。你不想为每个表创建一个功能......
我希望这是有道理的。
答案 0 :(得分:2)
首先使用以下功能:
CREATE FUNCTION dbo.tst(
@idINT ,
@StartDate DATETIME ,
@EndDate DATETIME)
SELECT dbo.tst(1, '2015-11-11 23:14:45')
你会得到:
错误提供的参数数量不足 程序或功能dbo.tst。
一种方法是添加默认参数值,如:
CREATE FUNCTION dbo.tst(
@id INT,
@StartDate DATETIME = NULL,
@EndDate DATETIME = NULL)
但仍然需要将其称为:
SELECT dbo.tst(1, '2015-11-11 23:14:45', default)
使用标量函数,您可以将其命名为:
EXECUTE dbo.tst 1, '2015-11-11 23:14:45'
我想你想要其他编程语言中的重载函数。使用功能,您始终需要指定所有参数。
使用存储过程,您可以使用:
CREATE PROCEDURE dbo.tst(
@idINT ,
@StartDate DATETIME = NULL,
@EndDate DATETIME = NULL)
AS
BEGIN
IF @StartDate IS NULL
-- user does not provide start date use default or do some operations
-- SET @StartDate = ...
...
IF @EndDate IS NULL
...
END;
然后你可以推理它:
EXEC dbo.tst 1, NULL, NULL
将与:
相同EXEC dbo.tst 1
更多信息: CREATE FUNCTION
:
当函数的参数具有默认值时,关键字 调用函数以检索函数时,必须指定DEFAULT 默认值。此行为与使用参数不同 省略参数的存储过程中的默认值 也暗示了默认值。但是,DEFAULT关键字不是 使用EXECUTE调用标量函数时需要 言。