代码之家  ›  专栏  ›  技术社区  ›  Pelicer

在结果集中使用经典ASP时出现SQL Server错误80040E14

  •  0
  • Pelicer  · 技术社区  · 6 年前

    我正在尝试使用经典的asp和sql server从数据库中为向量的每个位置选择结果。目前为止的准则是:

    FOR EACH x IN Tabela
    
        sql = "SELECT DISTINCT tborders.family AS family, tborders.qty AS qty, tborders.los AS los, CONVERT(DATE, tborders.mrd_date) AS mrd FROM [DASH].[dashboard_db].[dbo].[tb_family] AS tbfamily INNER JOIN [DASH].[dashboard_db].[dbo].[tb_started_zero] AS tborders ON tbfamily.[family] = tborders.[family] WHERE tborders.[Order Number] = "&x&""
        SET rs = conn.execute(sql)
    
        IF rs.EOF = false THEN
            mrd(counter) = rs("mrd") 
            family(counter) = rs("family") 
            los(counter) = rs("los") 
            qty(counter) = rs("qty") 
            counter=counter+1
        END IF
    
    NEXT
    

    注意到 tborders.[Order Number] 是一个 int 键入值。出于某种原因,我犯了这个错误:

    Microsoft SQL Server本机客户端11.0错误“80040e14”

    “=”附近的语法不正确。

    /asplearning/act/validate-schedule-line.asp,第46行

    我试过把 SET ,但结果集无法识别为对象。我很确定这些类型都很好,我试过:

    if isNumeric(x) THEN
            response.write("<h1>it is numeric</h1>")
            else
            response.write("<h1>not numeric</h1>")
        end if
    

    它已经为每个位置写上了“它是数字” Tabela . 有人能帮忙解决这个问题吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   DanB    6 年前

    看起来您有一个空项目(集合的第一个或最后一个项目)。

    我强烈建议您使用sp_executesql。这将使用编译的执行计划,这将验证您的参数(针对sql注入)。

    FOR EACH x IN Tabela
        if len(x) > 0 then
            sql = "exec sp_executeSql N'SELECT DISTINCT tborders.family AS family, tborders.qty AS qty, tborders.los AS los, CONVERT(DATE, tborders.mrd_date) AS mrd FROM [DASH].[dashboard_db].[dbo].[tb_family] AS tbfamily INNER JOIN [DASH].[dashboard_db].[dbo].[tb_started_zero] AS tborders ON tbfamily.[family] = tborders.[family] WHERE tborders.[Order Number] = @OrderNumber', N'@OrderNumber int', @orderNumber = " & x
            SET rs = conn.execute(sql)
    
            IF rs.EOF = false THEN
                mrd(counter) = rs("mrd") 
                family(counter) = rs("family") 
                los(counter) = rs("los") 
                qty(counter) = rs("qty") 
                counter=counter+1
            END IF
            rs.close
        end if
    NEXT