调用存储过程、传递 NULL 值、处理布尔值
Posted
技术标签:
【中文标题】调用存储过程、传递 NULL 值、处理布尔值【英文标题】:Calling stored procedures, passing NULL values, dealing with boolean values 【发布时间】:2010-01-21 21:38:13 【问题描述】:当调用存储过程时,我将值连接在一起,我的问题是如何调用存储过程但在其中一个参数中发送“NULL”值?
假设 AID = null,但如果我将它传递给我的查询我会收到错误?!
QueryConn.Execute("Search_Res " & Count & "," & AccessList("InvoiceLevel") & "," & AID)
好的,所以我的下一个问题是如何传入布尔变量?
在我的存储过程中,var @SearchChildren 要么为真要么为假,但我该如何定义它,或者我应该使用 int 并让事情变得简单,只使用 0 或 1?
MS SQL Server 2005。
【问题讨论】:
【参考方案1】:看起来您正在尝试使用临时查询而不是 ADO.Net DBCommand 对象来执行 SP。你不能在你的字符串中添加“@SearchChildren = null”吗?
您也可以使用命令对象显式设置参数值,相对简单。
SqlCommand cmd = new SqlCommand("Search_Res", QueryConn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@SearchChildren", DBNull.Value);
..
..
values = cmd.Execute();
对不起,C#……我的 VB 生锈了。
【讨论】:
【参考方案2】:将Search_Res
存储过程的参数更改为可选。 @参数=空。当传递 NULL 值时,该参数被忽略。
CREATE PROCEDURE dbo.foo
@param INT = NULL
AS
BEGIN ...
【讨论】:
实际上这是我使用的答案的基础,所以我得到了“勾号”。感谢所有回答的人。【参考方案3】:在这种情况下,由于您将过程调用和参数作为文字传递,因此您希望 AID
包含字符串值“null”,而不是 null 值。
或者,您应该考虑使用绑定参数。看起来您的调用语言是 VB.NET,所以我不完全知道如何使用该语言执行此操作,但有很多参考资料。
我没有使用过 SQL Server,但我知道在 Oracle 中将布尔变量传递给存储过程基本上是非法的。建议使用具有 0 或 1 值的 INT。
【讨论】:
以上是关于调用存储过程、传递 NULL 值、处理布尔值的主要内容,如果未能解决你的问题,请参考以下文章
Sql server2012存储过程参数传递null值,如何判定这个参数是null