我有一个参数化查询,如下所示:
SELECT title, html, shortname FROM dbo.Videos
WHERE Topic_ID = ? AND dbo.gradeLevelCheck(?, Grade_Lower, Grade_Upper) = 1
ORDER BY shortname ASC
Run Code Online (Sandbox Code Playgroud)
当我从ASP运行它时,我收到一条错误,内容如下:
Incorrect syntax near the keyword 'from'
Run Code Online (Sandbox Code Playgroud)
参数是56和1(所以没有空值).存储的函数dbo.gradeLevelCheck如下所示:
ALTER FUNCTION [dbo].[gradeLevelCheck]
(
@value int,
@lower int,
@upper int
)
RETURNS int
AS
BEGIN
DECLARE @result int;
IF (@lower IS NULL OR @lower <= @value) AND (@upper IS NULL OR @upper >= @value)
SET @result = 1;
ELSE
SET @result = 0;
RETURN @result;
END
Run Code Online (Sandbox Code Playgroud)
如果我使用硬编码到查询中的参数提交它,它工作正常.如果我删除ORDER BY子句,它也可以正常工作.但我不能让它以这种形式工作.任何人都可以帮我找出原因吗?
编辑:这里有一些额外的细节.该应用程序是使用JScript在Classic ASP中编写的.建立连接:
var conn = Server.CreateObject('ADODB.Connection');
var connectionString =
'Provider=SQLOLEDB;' +
'Data Source=' + Settings.dbServer + ';' +
'Initial Catalog=' + Settings.dbCatalog + ';' +
'User Id=' + Settings.dbUser + ';' +
'Password=' + Settings.dbPass + ';' +
'Connect Timeout=15;';
conn.Open(connectionString, conn);
Run Code Online (Sandbox Code Playgroud)
用于提交查询的代码如下所示:
DB.query = function(query) {
...
var cmd = Server.CreateObject("ADODB.Command");
cmd.activeConnection = conn;
cmd.commandText = query;
for (var i = 1; i < arguments.length; i++) {
cmd.Parameters(i-1).value = arguments[i];
}
return cmd.Execute();
...
}
Run Code Online (Sandbox Code Playgroud)
(这里,参数1和56作为附加参数传递给DB.query.)
"关键字'附近的错误语法来自'"是一个经典错误,通过连接字符串并忘记单词之间的某些空格来构建查询.我想这里第一行的末尾(...视频)和第二行的开头(WHERE ......)之间缺少一个空格.
| 归档时间: |
|
| 查看次数: |
5615 次 |
| 最近记录: |