MSSQL参数化查询导致"关键字附近的语法不正确"来自'"

Bri*_*ian 2 sql-server

我有一个参数化查询,如下所示:

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)

参数是561(所以没有空值).存储的函数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)

(这里,参数156作为附加参数传递给DB.query.)

Phi*_*ier 6

"关键字'附近的错误语法来自'"是一个经典错误,通过连接字符串并忘记单词之间的某些空格来构建查询.我想这里第一行的末尾(...视频)和第二行的开头(WHERE ......)之间缺少一个空格.