#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 ','.
, которое могло бы быть немного более полезным, учитывая количество задействованных запятых. Тем не менее, посмотрев и присмотревшись, я просто не вижу проблемы!!
Итак, к вопросам:
- Можете ли вы определить синтаксическую ошибку, о которой сообщается?
- Я хотел бы вставить 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
Вероятно, вы забыли некоторые одинарные кавычки для некоторых строковых данных.