1

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

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它本身可以具有 value NULL。这样,上面的测试就不起作用了。

有什么技术可以解决这种情况吗?

谢谢,彼得

4

2 回答 2

1

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

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

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

于 2012-09-08T11:08:20.433 回答
1

由于默认值是有效输入,因此您无法判断它是否被显式传递。您可以添加另一个参数,例如@Use_Info1 BIT,指示是否应使用或忽略某个参数。

于 2012-09-08T11:09:27.220 回答