При преобразовании некоторых из наших старых приложений от поставщика 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)
Хорошая ссылка на документ, но Teradata также поддерживает подстроку. Просто синтаксическое использование отличается. 'substr' имеет одну и ту же синтаксическую подпись, но имеет другое имя. Я уточню свой вопрос другим примером, который я нашел. – oscilatingcretin
@oscilatingcretin: Teradata поддерживает только 'SUBSTRING (x FROM n FOR m)' или 'SUBSTR (x, m, n)', но 'SUBSTRING (x, m, n)' является недопустимым и перезаписывается драйвером ODBC. Я бы не ожидал никаких других функций в OleDb, кроме тех, которые были найдены в ODBC. – dnoeth