【问题标题】:How to change identifier quote character in SSIS for connection to ODBC DSN如何更改 SSIS 中的标识符引号字符以连接到 ODBC DSN
【发布时间】:2023-04-08 09:56:02
【问题描述】:

我正在尝试创建一个 SSIS 2008 数据源视图,该视图通过 Ingres 的 ODBC 驱动程序从 Ingres 数据库中读取。我已经下载了 Ingres 10 社区版来获取 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]line 1, Unexpected character '['.”。

我发现当我尝试将表从 Ingres 添加到 SSIS 数据源视图时,我得到了同样的错误。选择 ODBC 提供程序的初始步骤工作正常,我会看到要添加的表/视图列表。然后我选择任何表,并尝试将其添加到视图中,并得到“错误 [5000A] [Ingres][Ingres 10.0 ODBC Driver][Ingres 10.0]line 3, Unexpected character '['.”。

按照 Ed Harper 创建命名查询的建议似乎也受到阻碍。如果我在我的命名查询中输入以下文本:

SELECT *
FROM "iitables"

我仍然收到错误消息:“ERROR [5000A] [Ingres][Ingres 10.0 ODBC Driver][Ingres 10.0]line 2, Unexpected character '['”。

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

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

似乎 SSIS 假定括号引号字符是可接受的,但实际上它们不是。我怎样才能说服它不要使用它们?双引号是可以接受的。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 这听起来很有希望。我一直在想我可能需要做一些可怕的事情,比如在 SQL 服务器中创建一个 SELECT * FROM OPENROWSET(...) 的视图,所以写 SELECT * FROM "double"."quoted" 更可取。
    • 再次被 SSIS 阻挠!它使用使用括号引号的查询来包装手写 SQL。我编辑了问题以进一步解释。
    • @William Rose - 我无法对此进行测试,因为我目前无法访问 SSIS 安装,但 Ingres 连接配置中是否有启用 ANSI 引用标识符的选项?
    • 我已经写了三遍了,它总是迷路:第三次幸运? ANSI SQL-92 说带引号的标识符使用双引号,而不是括号,因此 Ingres 驱动程序仅支持 ANSI 带引号的标识符(没有打开或关闭它们的选项)。我检查了 ODBC 驱动程序代码,以确保它在询问支持的 SQL 功能时返回双引号字符,并且看起来确实如此。所以我不认为这是司机做错了什么。
    • @William Rose - 抱歉,我想我不是很清楚 - 我的意思是 SSIS 中连接管理器的高级属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    • 2010-10-02
    • 2017-11-26
    • 2012-11-27
    • 1970-01-01
    相关资源
    最近更新 更多