#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 🙂