我在Sql Server 2005中有一个存储过程,其varchar输入参数定义为:
@Value varchar(24) = NULL
在我的VB6应用程序中,我尝试使用ADO函数设置参数:
Set prmParamVal = cmdChkParam.CreateParameter(, adVarChar, adParamInput, Len(paramValue), paramValue)
如果我尝试传递的值是一个空(零长度)字符串,则出现以下错误:
ADODB.Connection错误‘800a0e7c’参数对象定义不正确。提供的信息不一致或不完整。
我尝试传递NULL值而不是空字符串,但这会导致不同的错误。
如何将空字符串或NULL值传递给存储过程?
我已经阅读了很多文章并搜索了论坛(甚至多次发现我的问题),但没有正确的答案。
到目前为止,对于空字符串的解决方法是将length设置为1或将string设置为“”(空格)。但这并不是很好,我希望发送NULL。我还尝试将paramValue设置为vbNull,Null,vbNullString或将prmParamVal.value
=空设置为没有任何运气!
这里的快速测试表明NULL应该可以完成这项工作。我用来测试的示例代码(带有一个按钮和一个文本框的简单表单):
Private Sub Command1_Click()
Dim dbConn As ADODB.Connection
Dim dbComm As ADODB.Command
Dim dbRS As ADODB.Recordset
Set dbConn = New ADODB.Connection
With dbConn
.ConnectionString = "...REPLACE THIS ACCORDINGLY..."
.ConnectionTimeout = 10
.Open
End With
Set dbComm = New ADODB.Command
With dbComm
.ActiveConnection = dbConn
.CommandType = adCmdStoredProc
.CommandText = "usp_Bob"
.Parameters.Append .CreateParameter("b", adVarChar, adParamInput, 10, Null)
Set dbRS = .Execute
End With
Text1.Text = dbRS.Fields.Item(0).Value
dbRS.Close
dbConn.Close
End Sub
它调用了这个存储过程:
ALTER PROCEDURE usp_Bob
@b VARCHAR(10)
AS
IF @b IS NULL
SELECT 'NULL' AS '1'
ELSE
IF @b = ''
SELECT 'EMPTY' AS '1'
ELSE
SELECT 'NOT NULL AND NOT EMPTY' AS '1'
usp_Bob使用VB值返回“ NULL” Null
(根据上面的示例),使用VB值返回“ NOT NULL”
vbNull
。如果Null
对您不起作用,那么我无法对可能出问题的地方发表评论……!
类似地,应该以空字符串的形式传递空字符串(即空字符串),即str = ""
usp_Bob返回“ EMPTY”。其他任何东西都会返回“ NOT NULLAND NOT EMPTY”(如预期)。
如果您无法传递NULL,则另一种选择是在sproc中将一个空字符串转换为NULL,即
IF @param = ''
SET @param = NULL
请注意,您经过的长度不会太大。这反映了SQL Server中定义的参数的最大长度,而不是所传递的数据的长度。
问题内容: 我正在使用一个存储过程,在其中发送数据库中其类型为的存储过程,并且还声明parameter 。 当我将列名传递为float时,它给出了错误: 消息8114,将数据类型nvarchar转换为float时出错。 这是我的测试查询 当我将参数类型更改为时,它给了我这个错误: 消息8117,操作数数据类型varchar对avg运算符无效。 我该如何解决? 更新 : 这是我的存储过程: 问题答案
问题内容: 在SQL Server 2014中,我试图创建一个动态的WHERE子句。 我已将查询构建为字符串,但是当我尝试使用sp_executesql执行查询时,出现以下错误:提示 13您必须声明标量变量“ @desde”。 我不知道如何使sp_executesql识别输入参数。 问题答案: 代替 使用 您必须定义在动态查询中使用的参数,例如 请参考sp_executesql 否则,您可以将动态
问题内容: 如何将以空格或逗号分隔的字符串传递给存储过程和过滤结果?我正在尝试做类似的事情- 然后是我要首先存储的过程 查找所有具有名字或姓氏的记录,例如key1 使用名字或姓氏(例如key2)过滤步骤1 使用名字或姓氏(如键3)过滤步骤2 另一个例子: 如果我搜索任何以下内容,则应返回每个内容? “ xyz开发人员”返回2行 “ xyz abc”返回1行 “ abc开发者”返回1行 “ hell
com.microsoft.sqlserver.jdbc.sqlserverexception:操作数类型冲突:nvarchar与com.microsoft.sqlserver.jdbc.sqlserverexception.makefromdatabaseerror(sqlserverexception.java:196)com.microsoft.sqlserver.jdbc.sqlserve
问题内容: 我正在尝试在MySQL存储过程中将数组作为字符串传递,但无法正常工作。 这是我的SQL代码: 这是我如何调用该过程: 有任何想法吗? 问题答案: 我的朋友在这里是FIND_IN_SET。我首先在此问题中遇到了该方法:此问题也涉及了MYSQL-使用逗号分隔的字符串作为变量输入的存储过程 有关FIND_IN_SET的MySQL文档,请参见http://dev.mysql.com/doc/r