VBA вызывает SQL-запрос из Teradata, появляется сообщение об ошибке 3535, в то время как эта инструкция SQL хорошо работает в Teradata

#vba #teradata #teradatasql

Вопрос:

Версия VB для приложения-7.1; версия Teradata 16.20.53.27.
Инструкция SQL очень длинная, ее длина составляет 59972.Я запускаю его непосредственно в Teradata, он хорошо работает. Я использую следующее для выполнения этого SQL в VBA:

 set connection = CreateOjbect("ADODB.connection")
connection.open "DSN=xxx UID=XXX PWD=XXX"
Set ObjRecordSet=CreateObject("ADO.RecordSet")
ObjRecordSet.open StrQuery connection
ObjRecordSet.close
connection.close
 

сообщение об ошибке
-ошибка во время выполнения ‘-2147217833 (80040e57)
[Teradata] [Драйвер ODBC Teradata]База данных Teradata
Не удалось преобразовать символьную строку в числовое значение

Я проверяю длинную инструкцию SQL, не смог найти функцию преобразования для числового значения, только преобразование строки в varchar(80). Спасибо!

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

1. Возможно автоматическое преобразование строки в число, например, сравнение столбца VarChar с числом (в Объяснении вы увидите (FLOAT FORMAT '-9.99999999999999E-999') ). Но это должно произойти и при непосредственном запуске.

Ответ №1:

После разделения длинного SQL-запроса я нахожу основную причину:

 select * 
from table1 
where column1 = '29991231'
 

в то время как тип данных столбца 1-дата. Он может быть выполнен в Teradata SQL assist, если он не работает в VBA.

Я изменяю это, чтобы быть:

 select * 
from table1 
where column1 = to_date('31-12-2999', 'DD-MM-YYYY')
 

у него нет ошибок, когда VBA вызывает этот SQL-запрос.

В любом случае, спасибо за ваше внимание!

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

1. Кстати, рекомендуемый способ записи даты-это стандартный литерал даты SQL: DATE '2999-12-31' , короче, чем to_date 🙂