[英]Microsoft OLE DB Provider for SQL Server error '80040e14' Invalid column name . SQL query
[英]Microsoft OLE DB Provider for SQL Server error '80040e14'
存储过程,并使用ADO进行连接,但是引号有问题。
x = "text'"
If instr(x,"'") then x=replace(x,"'","''")
'x = "text''" at this point
Set Rs = Server.Createobject("adodb.recordset")
Rs.Open "Select_SP @name='" & x & "'"
我以为我做对了。。但是我想不是,因为我遇到了这个错误:
Microsoft OLE DB Provider for SQL Server error '80040e14'
SELECT ID from Table where Name='text''
不是吗
名称='文字'''
为什么SQL无法使用ADO识别双引号?
Select_SP使用如下所示的内容:
SET @sql = 'SELECT ID from Table where Name='''+@name+''''
Exec(@sql)
我是否正确编写了此SP?
简短的答案是,不要以您的方式调用过程。 请改用Command
。 这是从内存中获取的,因为目前我还没有Windows系统,但是它应该可以工作:
Dim cmd
Set cmd = Server.CreateObject("ADODB.Command")
Set Cmd.ActiveConnection = myConnectionVariableHere
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "Select_SP"
'Note: if the above two lines don't work, replace them with the following
'cmd.CommandType = adCmdText
'cmd.CommandText = "Select_CP @name=?"
cmd.Parameters.Append cmd.CreateParameter("name", adVarChar, adParamInput, len(x), x)
Rs.Open cmd
现在,所有这些,我不能告诉您为什么您的过程为什么要提供特定的输出,因为您没有向我们显示其代码。 但是我相当确定ADO不会将一对单引号转换为双引号-不知道为什么会这样。
看到OP的编辑后进行编辑。 除非绝对必要,否则不要以这种方式执行SQL。 你只会给自己悲伤。 我不知道您正在使用哪个数据库,并且该过程的语法看起来并不熟悉,但是在Oracle中,您可以编写如下内容:
PROCEDURE sql_test(MyName IN VARCHAR2, MyCursor OUT SYS_REFCURSOR) IS
BEGIN
OPEN MyCursor FOR SELECT id FROM some_table WHERE name = MyName;
END;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.