【问题标题】:Pass SSIS parameter into OPENQUERY将 SSIS 参数传递给 OPENQUERY
【发布时间】:2019-04-30 10:55:27
【问题描述】:

我需要帮助将 SSIS 中的参数传递到“OPENQUERY”中,以测试我正在使用以下脚本但出现错误的查询:

脚本:

DECLARE @TSQL varchar(8000), @Date varchar(11)
SELECT  @Date = '28 Nov 2018'
SELECT  @TSQL = 'SELECT * FROM OPENQUERY([TEST], ''SELECT * FROM PUB.TEST
WHERE Test_Date >= ''''' + @Date + ''''''')'
EXEC (@TSQL)

错误:

OLE DB provider "MSDASQL" for linked server "TEST" returned message "[DataDirect][ODBC Progress OpenEdge Wire Protocol driver][OPENEDGE]Invalid date string (7497)".
Msg 7321, Level 16, State 2, Line 4
An error occurred while preparing the query "SELECT * FROM PUB.TEST 
WHERE Test_Date >= '28 Nov 2018'" for execution against OLE DB provider "MSDASQL" for linked server "TEST". 

SSIS OLE DB Source 中的脚本应如下所示:

DECLARE @TSQL varchar(8000), @Date varchar(11)
SELECT  @Date = ?
SELECT  @TSQL = 'SELECT * FROM OPENQUERY([TEST], ''SELECT * FROM PUB.TEST
WHERE Test_Date >= ''''' + @Date + ''''''')'
EXEC (@TSQL)

【问题讨论】:

  • 如果你运行你的第一个代码块,它运行成功了吗?这有助于我们确定是您的 OQ 语法和/或字符串构建的问题,还是 SSIS 中的参数化问题。
  • 在 SSIS 中创建变量并使用表达式在其中构建字符串可能会更好。
  • @billinkc 我设法找到了问题,这是一个愚蠢的错误,它与 OpenEdge DB 如何处理日期文字有关。只需将 Date 变量更改为 '28-Nov-2018' 即可解决问题。但是,您对不推荐使用 MSDASQL 的建议非常有用,我现在使用 SSIS 变量表达式构建 SQL 语句

标签: sql sql-server tsql ssis openedge


【解决方案1】:

修改下面的脚本,问题出在日期格式上

DECLARE @TSQL varchar(8000), @Date varchar(11)
SELECT  @Date = '28-Nov-2018'
SELECT  @TSQL = 'SELECT * FROM OPENQUERY([TEST], ''SELECT * FROM PUB.TEST
WHERE Test_Date >= ''''' + @Date + ''''''')'
EXEC (@TSQL)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-16
    • 2012-08-14
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    • 1970-01-01
    相关资源
    最近更新 更多