如何更改SSIS中的标识符引号字符以连接到ODBC DSN

时间:2010-04-23 06:41:50

标签: sql-server-2008 ssis odbc ingres quoted-identifier

我正在尝试创建一个SSIS 2008数据源视图,该视图通过Ingres的ODBC驱动程序从Ingres数据库中读取。我已经下载了Ingres 10 Community Edition以获取ODBC驱动程序,安装它,在运行SSIS的服务器上设置数据访问服务器和DSN。

如果我在运行SSIS的服务器上连接到SQL Server 2008数据库引擎,我可以通过运行以下命令从ODBC DSN检索Ingres中的数据:

SELECT *
FROM OPENROWSET( 'MSDASQL'
               , 'DSN=IngresODBC;UID=testuser;PWD=testpass'
               , 'SELECT * FROM iitables')

所以我很确定ODBC设置是正确的。

如果我使用SQL Server样式括号内的标识符引号尝试相同的查询,则会出现错误,因为Ingres不支持此语法。

SELECT *
FROM OPENROWSET( 'MSDASQL'
               , 'DSN=IngresODBC;UID=testuser;PWD=testpass'
               , 'SELECT * FROM [iitables]')

错误是“[Ingres] [Ingres 10.0 ODBC Driver] [Ingres 10.0]第1行,意外字符'['。”。

我发现当我尝试将Ingres中的表添加到SSIS数据源视图时,我得到了同样的错误。选择ODBC提供程序的第一步工作正常,我显示了要添加的表/视图列表。然后我选择任何表,并尝试将其添加到视图中,并获得“ERROR [5000A] [Ingres] [Ingres 10.0 ODBC Driver] [Ingres 10.0]第3行,意外字符'['。”。

根据Ed Harper关于创建命名查询的建议似乎也受到了阻碍。如果我将以下文本放入我的命名查询中:

SELECT *
FROM "iitables"

我仍然收到错误:“ERROR [5000A] [Ingres] [Ingres 10.0 ODBC驱动程序] [Ingres 10.0]第2行,意外字符'['”。

根据错误,SSIS传递给ODBC的查询文本为:

SELECT [iitables].*
FROM 
(
SELECT *
FROM "iitables"
)
 AS [iitables]

似乎SSIS假设括号引号字符是可接受的,否则它们是可接受的。我如何说服它不使用它们?双引号是可以接受的。

1 个答案:

答案 0 :(得分:0)

我不知道如何更改引用的标识符,但您可以通过创建空白DSV(单击DSV向导而不添加任何表)来解决此问题,而不是将表添加到DSV直接添加为命名查询(右键单击空DSV并选择“新命名查询”。

这使您可以自己控制查询文本,并设置自己的标识符。

(我正在根据SSIS 2005提出这个建议,但我认为2008年的工作方式类似。)