Ошибка Ruby ODBC 37000 (102) синтаксическая ошибка Sql

#sql #ruby #sql-server #null #syntax-error

#sql #ruby #sql-сервер #null #синтаксическая ошибка

Вопрос:

У меня есть следующая вставка базы данных ruby с использованием ODBC. Соединение в порядке.

  dbh.do( "INSERT INTO prowlerRunningResults(ProwlerDriver, SourceURL, Title, DestinationURL, FileSource, FileType, FileName, LastModified, FileSize, HashMD5, HashSHA256, ImageBinary) 
            VALUES (#{driver}, #{source}, #{title}, 'NA', #{imgSrc},  #{fileType},  #{fileName},  #{lastModified}, #{fileSize},   #{md},   #{sha},   #{binary}   )" )
  

Однако я получаю сообщение Error message: 37000 (102) [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near ','. , которое могло бы быть немного более полезным, учитывая количество задействованных запятых. Тем не менее, посмотрев и присмотревшись, я просто не вижу проблемы!!

Итак, к вопросам:

  1. Можете ли вы определить синтаксическую ошибку, о которой сообщается?
  2. Я хотел бы вставить NULL вместо ‘NA’, но понятия не имею, как это сделать в ruby. Как это делается?

Редактировать: Может быть проблема со схемой БД. Физическая база данных имеет размер файла как int. Итак, я обновил код, чтобы вставить #{fileSize.to_i} но ImageBinary является переменной (MAX) — возможно, я мог бы записать файл в виде шестнадцатеричной строки? Что вы думаете?

Комментарии:

1. Попробуйте выполнить puts или raise строки, чтобы увидеть, к чему преобразуется SQL. Скорее всего, вам нужны одинарные кавычки вокруг ваших строковых значений.

2. @MarlinPierce преобразуйте свой комментарий в ответ — и вы получите баллы. Я действительно забыл цветущие кавычки!!

3. Нет ли в интерфейсе чего-нибудь для использования заполнителей? Интерполяция строк для построения SQL является so 1998.

4. @muistoosh не уверен — не знаю ни о чем подобном.

Ответ №1:

Для отладки попробуйте просмотреть развернутую строку. Вы можете выполнять puts, log или raise.

 sql = "INSERT INTO prowlerRunningResults(ProwlerDriver, SourceURL, Title, DestinationURL, FileSource, FileType, FileName, LastModified, FileSize, HashMD5, HashSHA256, ImageBinary) 
        VALUES (#{driver}, #{source}, #{title}, 'NA', #{imgSrc},  #{fileType},  #{fileName},  #{lastModified}, #{fileSize},   #{md},   #{sha},   #{binary}   )"
puts sql
logger.info sql
raise sql
  

Вероятно, вы забыли некоторые одинарные кавычки для некоторых строковых данных.