3

遇到这个问题,不知道为什么不行。

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

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

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

如果我使用:

SET @Referral_Type = 1

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

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

谢谢

4

2 回答 2

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')在存储过程的开头添加。

于 2012-11-09T21:41:18.413 回答
0

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


您的回答没有任何意义——

 SET @Referral_Type = 1

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

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

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

于 2012-11-09T21:27:36.647 回答