Sql TdOleDb和Teradata.NET提供程序之间的差异

Sql TdOleDb和Teradata.NET提供程序之间的差异,sql,oledb,teradata,Sql,Oledb,Teradata,在将我们的一些旧应用程序从TdOleDb提供程序转换为.NET提供程序的过程中,我发现了所支持的SQL中的一些差异。我遇到的两个例子之一是TdOleDb如何允许这一点: substring('abcd',2,2) 但是,.NET提供程序抛出一个异常。您必须将其转换为Teradata的两个受支持的子字符串函数之一,如下所示: substr('abcd',2,2) substring('abcd' from 2, 2) 有没有一种方法可以识别这两个提供者之间解析器工作方式的所有已知差异?我们当然

在将我们的一些旧应用程序从TdOleDb提供程序转换为.NET提供程序的过程中,我发现了所支持的SQL中的一些差异。我遇到的两个例子之一是TdOleDb如何允许这一点:

substring('abcd',2,2)
但是,.NET提供程序抛出一个异常。您必须将其转换为Teradata的两个受支持的子字符串函数之一,如下所示:

substr('abcd',2,2)
substring('abcd' from 2, 2)
有没有一种方法可以识别这两个提供者之间解析器工作方式的所有已知差异?我们当然计划测试所有东西,但我们可能会错过一两次SQL执行,因此能够搜索应用程序中不受支持的SQL将是一个很大的帮助

编辑

这里是我发现的另一个例子,两个提供者的行为不同。这是使用
CommandType.storedProcess执行宏的旧OleDb代码

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)
OleDB似乎支持(至少部分)ODBC语法,请参阅


很好的文档参考,但Teradata也支持
子字符串
。只是它的结构用途不同
substr
共享相同的语法签名,但名称不同。我将用我找到的另一个示例更新我的问题。@oscilatingcretin:Teradata只支持
子字符串(x从n到m)
子字符串(x,m,n)
,但
子字符串(x,m,n)
无效,并由ODBC驱动程序重写。除了ODBC中的函数外,我不希望OleDb中还有其他函数。