SQL存储过程:如何检测是否传递了可选的输出参数?

时间:2012-09-08 11:00:36

标签: sql sql-server

我正在编写一个存储过程,它接受一个输入参数,并可以通过可选的输出参数返回相关属性。它的定义如下:

CREATE PROCEDURE dbo.sp_get_info
                       @Identifier  nvarchar(50),
                       @Info1       uniqueidentifier = NULL  OUTPUT,
                       @Info2       nvarchar(10) = NULL      OUTPUT,
                       @Info3       int = NULL               OUTPUT

我想把程序称为:

DECLARE @uid uniqueidentifier
...
EXEC sp_get_info @Idenfier = 'a123', 
                 @Info1 = @uid

获取每个输出值会导致不同的活动。这样,我想检测到只应从其他地方检索@Info1输出值的事实。这样,该过程不需要执行可能代价高昂的代码来检索其他输出(现在不需要的)参数。

首先,我正在考虑像IF @Info1 IS NOT NULL do_something这样的测试。但是,由于OUTPUT还说该参数也可以具有输入值(Microsoft SQL),@uid本身可以具有值NULL。这样,上述测试不起作用。

是否有任何技术可以解决这种情况?

谢谢,彼得

2 个答案:

答案 0 :(得分:1)

您可以使用@field@value参数。 @field可以是Info1, Info2, Info3。现在@value可以是null,您仍然知道要搜索的字段。

CREATE PROCEDURE dbo.sp_get_info
    @Identifier nvarchar(50),
    @field nvarchar(50),
    @value nvarchar(50) output

调用代码必须将@valuenvarchar(50)转换为所需类型,但这通常很容易。

答案 1 :(得分:1)

由于默认值是有效输入,因此您无法判断它是否已显式传递。您可以添加其他参数,例如@Use_Info1 BIT,表示是应该使用还是忽略参数。