Ошибка SQL Server 80040e14 Использование классического ASP в наборе результатов - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь выбрать результаты из базы данных для каждой позиции вектора, используя классический 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 Ответ

0 голосов
/ 22 октября 2018

Похоже, у вас есть пустой элемент (первый или последний элемент коллекции).

Я настоятельно рекомендую вам использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...