我有一个看起来像这样的参数化查询:
SELECT title, html, shortname FROM dbo.Videos
WHERE Topic_ID = ? AND dbo.gradeLevelCheck(?, Grade_Lower, Grade_Upper) = 1
ORDER BY shortname ASC
当我从 ASP 运行它时,我收到一条错误消息:
Incorrect syntax near the keyword 'from'
参数是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
如果我使用硬编码到查询中的参数提交它,它工作正常。如果我删除 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);
用于提交查询的代码如下所示:
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();
...
}
(这里,参数1
和56
作为附加参数传递给DB.query
。)