ASP Classic SQL Query错误信息,请正确的语法

时间:2013-08-28 02:01:55

标签: oracle asp-classic

我在URL中传递了两(2)个参数,并构建了以下SQL:

mQry = "SELECT DISTINCT name FROM link3 WHERE invoice_num ="  & request.querystring("num") & "AND name LIKE" & request.querystring("nam")

我收到错误消息:

  

Microsoft OLE DB Provider for Oracle错误' 80040e14'

     

ORA-00933:SQL命令未正确结束

这是什么样的语法?

2 个答案:

答案 0 :(得分:4)

您需要在LIKE子句周围加上引号。此外,您可以考虑使用百分比进行通配符匹配

mQry = "SELECT DISTINCT name FROM link3 WHERE invoice_num =" & request.querystring("num") & " AND name LIKE '%" & request.querystring("nam") & "%' "

答案 1 :(得分:0)

您的部分问题可能是您在插入值时引号周围的不正确间距。这样:

mQry = "SELECT DISTINCT name FROM link3 WHERE invoice_num ="  & request.querystring("num") & "AND name LIKE" & request.querystring("nam") 

最有可能导致将其发送到数据库:

SELECT DISTINCT name 
FROM link3
WHERE invoice_num =2AND name LIKEsomeothervalue

如果您添加适当的间距:

mQry = "SELECT DISTINCT name FROM link3 WHERE invoice_num = "  & request.querystring("num") & " AND name LIKE " & request.querystring("nam")

它可以为您提供更加正确的格式化结果:

SELECT DISTINCT name 
FROM link3
WHERE invoice_num = 2 AND name LIKE someothervalue

每当我收到指示SQL格式/结构问题的错误时,我倾向于记录在它进入数据库之前发送的SQL。这有助于发现类似的奇怪问题。

此外,sharpguru is probably right - LIKE子句可能也未正确格式化。您需要将文本值括在单引号中,%是一个匹配0个或更多字符的通配符 - 使其更像您可能正在寻找的内容:

mQry = "SELECT DISTINCT name FROM link3 WHERE invoice_num = "  & request.querystring("num") & " AND name LIKE '%" & request.querystring("nam") & "%'"

现在,这一切都假设invoice_num是某种数值 - 这在您的问题和代码中隐含着。但是,如果不是(正如您的评论和其他问题所示),您需要将值放在单引号中 - 就像几乎所有RDBMS中的任何其他文本字段一样:

mQry = "SELECT DISTINCT name FROM link3 WHERE invoice_num = '"  & request.querystring("num") & "' AND name LIKE '%" & request.querystring("nam") & "%'"

如果数据库列invoice_num的数据类型设置为非数字数据类型,也将使用上述内容。仅仅因为数据可以被称为数字,并不意味着它被自动视为数字。如果列的数据类型是text,ntext或任何其他非数字类型,则您需要将引号括起来,就像任何其他文本值一样。


而且,虽然与问题无关,但我希望这是一个过于简化的示例,并且您不会直接将QueryString值插入SQL语句中。如果您还没有被告知,那可以解决各种各样的安全问题 - 请查看SQL Injection上的一些信息。