我正在编写一个存储过程,它接受一个输入参数,并可以通过可选的输出参数返回相关属性。它的定义如下:
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
。这样,上述测试不起作用。
是否有任何技术可以解决这种情况?
谢谢,彼得
答案 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
调用代码必须将@value
从nvarchar(50)
转换为所需类型,但这通常很容易。
答案 1 :(得分:1)
由于默认值是有效输入,因此您无法判断它是否已显式传递。您可以添加其他参数,例如@Use_Info1 BIT
,表示是应该使用还是忽略参数。