调用存储过程,传递NULL值,处理布尔值

时间:2010-01-21 21:38:14

标签: .net sql-server stored-procedures

在调用存储过程时,我将值连接在一起,我的问题是如何调用存储过程但在其中一个参数中发送'NULL'值?

让我们说AID = null,但如果我把它传递给我的查询我会收到错误?!

QueryConn.Execute("Search_Res " & Count & "," & AccessList("InvoiceLevel") & "," & AID)

好的,我的下一个问题是如何传入一个布尔变量?

在我的存储过程中,var @SearchChildren是true还是false,但是我该如何定义它,或者我应该使用int并为自己简化并只使用0或1?

MS SQL Server 2005。

3 个答案:

答案 0 :(得分:8)

看起来您正在尝试使用即席查询而不是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生锈了。

答案 1 :(得分:1)

Search_Res存储过程的参数更改为可选。 @parameter = NULL。传递NULL值时,将忽略该参数。

CREATE PROCEDURE dbo.foo 
    @param INT = NULL 
AS 
BEGIN ...

答案 2 :(得分:0)

在这种情况下,因为您要将过程调用和参数作为文字传递,您希望AID包含字符串值“null”,而不是空值。

或者,您应该考虑使用绑定参数。看起来你的调用语言是VB.NET,所以我不知道如何用那种语言做到这一点,但有很多引用。

我没有使用SQL Server,但我知道在Oracle中将布尔变量传递给存储过程基本上是非法的。建议使用值为0或1的INT。