2016-02-08 2 views
0

При преобразовании некоторых из наших старых приложений от поставщика TdOleDb к поставщику .NET я обнаружил ряд различий в поддерживаемом SQL. Один из двух примеров, с которыми я столкнулся в том, как TdOleDb это позволяет:Различия между поставщиками TdOleDb и Teradata .NET

substring('abcd',2,2) 

Поставщик .NET, однако, вызывает исключение. Вы должны преобразовать его в один из двух поддерживаемых функций подстрок Teradata как это:

substr('abcd',2,2) 
substring('abcd' from 2, 2) 

Есть ли способ, чтобы определить все известные различия в том, как анализатор работает между этими двумя поставщиками? Мы, конечно, планируем тестировать все, но мы могли бы пропустить один или два SQL-исполнения, поэтому отличная помощь могла бы найти наши приложения для неподдерживаемого SQL.

Редактировать

Вот другой пример, который я нашел, где два провайдера ведут себя по-разному. Это старый OleDb код, который выполняет макрос с CommandType.StoredProcedure:

cmdQuote = New OleDb.OleDbCommand 
cmdQuote.Connection = conQuote 

cmdQuote.CommandType = CommandType.StoredProcedure 
cmdQuote.CommandText = "mydb.mymacro" 

Когда я изменить все OleDb классов к тому провайдеру .NET, Teradata выдает это исключение:

[Teradata Database] [5494] 'mymacro' is not a stored procedure 

К заставить его работать с провайдером .NET, я должен преобразовать его в этом:

cmdQuote = New TdCommand 
cmdQuote.Connection = conQuote 

cmdQuote.CommandText = "execute mydb.mymacro(?)" 
cmdQuote.Parameters.Add(MyParam) 

ответ

0

Похоже OLEDB опоры (по крайней мере, некоторые) ODBC-синтаксисе см

Scalar Functions

+0

Хорошая ссылка на документ, но Teradata также поддерживает подстроку. Просто синтаксическое использование отличается. 'substr' имеет одну и ту же синтаксическую подпись, но имеет другое имя. Я уточню свой вопрос другим примером, который я нашел. – oscilatingcretin

+0

@oscilatingcretin: Teradata поддерживает только 'SUBSTRING (x FROM n FOR m)' или 'SUBSTR (x, m, n)', но 'SUBSTRING (x, m, n)' является недопустимым и перезаписывается драйвером ODBC. Я бы не ожидал никаких других функций в OleDb, кроме тех, которые были найдены в ODBC. – dnoeth

Смежные вопросы