可选参数值被忽略

时间:2012-11-09 21:24:59

标签: sql sql-server

进入这个问题,我不知道为什么它不起作用。

我有一个存储过程,它有一个可选的第二个参数。

PROCEDURE [dbo].[gsp_MyProC] @Account_Number VARCHAR(10), @Referral_Type VARCHAR(5) ='1'

现在,@Referral_Type在SQL语句中使用,并且当前永远不会被传递到过程中(遗留代码,不要问)。但是,有时它不会设置为1,它只剩下null(通过返回参数进行验证)。

如果我使用:

SET @Referral_Type = 1

在存储过程中,它总是被设置(如预期的那样)。

但有人知道为什么默认值不会设置为1?

由于

2 个答案:

答案 0 :(得分:4)

不提供参数和为参数提供NULL值之间存在区别......

EXEC dbo.gsp_MyProC 'AccountNumber', NULL

将导致@Referral_Type = NULL

...然而

EXEC dbo.gsp_MyProC 'AccountNumber'

将导致@Referral_Type = '1'

您的客户端库可能提供NULL值,而不是根本不提供任何值。

作为一种解决方法......如果@Referral_Type永远不应该是NULL,则可以在存储过程的开头添加SET @Referral_Type = ISNULL(@Referral_Type, '1')

答案 1 :(得分:0)

请记住,如果要更改参数,则必须在SP的定义中使用OUTPUT修改器。此外,您还在调用的定义中创建了一个输出参数。


你的回答没有意义---

 SET @Referral_Type = 1

应该是非法的,因为常量1不是字符串。

正如您在问题中描述的那样,我希望它永远不会设置为1 - 它始终设置为'1'

也许你总是在看结果的“第一个”元素数组(或s[1])?这将始终为null,因为字符串在c,c ++和C#

中以null结尾