SQL Server SSIS Teradata SQL UNION ALL

时间:2015-01-05 23:56:07

标签: sql-server ssis teradata

我有一个Teradata SQL查询,它有20多个单独的SELECT查询,全部由UNION ALL分隔。此查询在SQL Assistant中运行正常。我想使用这个SQL从Teradata设置一个自动SSIS拉。我正在我的数据流区域中使用ADO.NET任务" SQL"作为数据访问模式。当我在框中输入我的SQL时,我收到此错误:

TITLE:Microsoft Visual Studio

Error at Data Flow Task [TIRKS EDW [1]]: System.Data.Odbc.OdbcException: ERROR [42000] [Teradata][ODBC Teradata Driver][Teradata Database] Syntax error, expected something like an 'END' keyword between ')' and the word 'en'. 
   at System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode)
   at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader, Object[] methodArguments, SQL_API odbcApiMethod)
   at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader)
   at System.Data.Odbc.OdbcCommand.ExecuteReader(CommandBehavior behavior)
   at System.Data.Odbc.OdbcCommand.ExecuteDbDataReader(CommandBehavior behavior)
   at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
   at Microsoft.SqlServer.Dts.Pipeline.DataReaderSourceAdapter.ReinitializeMetaData()
   at Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostReinitializeMetaData(IDTSManagedComponentWrapper100 wrapper)

其他信息:

ERROR [42000] [Teradata][ODBC Teradata Driver][Teradata Database] Syntax error, expected something like an 'END' keyword between ')' and the word 'en'.  (TDATA32.DLL)

按钮:

确定

但是,如果我将SQL减少到只有两个使用一个UNION ALL分隔符的选择,它将运行正常。同样,我的SQL超过20个SELECT / UNION ALL将在SSIS之外正常运行。所以我怀疑它是SSIS内部的东西。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

查询长度可能有问题。 当通过JDBC运行超过32000个字符(或某些字符)的语句时,我遇到了类似的问题。

尝试在文本编辑器中计算长度,并选择尽可能多的SELECT来覆盖大约30k字符并进行测试。

实际上,我从来没有把决心问题解决了。但是您可以使用技巧来减少查询长度来实现这种特定情况(例如:使用SEL而不是SELECT)。

干杯