进入这个问题,我不知道为什么它不起作用。
我有一个存储过程,它有一个可选的第二个参数。
PROCEDURE [dbo].[gsp_MyProC] @Account_Number VARCHAR(10), @Referral_Type VARCHAR(5) ='1'
现在,@Referral_Type
在SQL语句中使用,并且当前永远不会被传递到过程中(遗留代码,不要问)。但是,有时它不会设置为1,它只剩下null
(通过返回参数进行验证)。
如果我使用:
SET @Referral_Type = 1
在存储过程中,它总是被设置(如预期的那样)。
但有人知道为什么默认值不会设置为1?
由于
答案 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#