你怎么能得到参数的数量

时间:2015-11-19 07:01:14

标签: sql sql-server function stored-procedures parameters

如何获得赋予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中实现哈希函数,以便为每条记录创建哈希值以发现更改。由于每个表都有不同数量的字段,因此可以使用它。你不想为每个表创建一个功能......

我希望这是有道理的。

1 个答案:

答案 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调用标量函数时需要   言。