【问题标题】:OPENQUERY in table-valued function with parameters带参数的表值函数中的 OPENQUERY
【发布时间】:2020-01-20 04:01:37
【问题描述】:

我是使用 OPENQUERY 的新手,在表值函数中使用它时遇到问题,下面是我的查询

 INSERT INTO @returnList 
     SELECT * 
     FROM OPENQUERY(lnk_db, 'SELECT s.posting_date -COALESCE(max(a.due_date::date), l.grant_date) as loan_age
                             FROM ln.loan_snapshot_active s
                             INNER JOIN ln.loan_active l ON l.id = s.loan_id
                             LEFT JOIN ln.amortization_schedule a ON a.loan_id =  l.id
                                                                  AND a.status = ''PAID''
                                                                  AND a.due_date < s.posting_date
                             WHERE s.posting_date = ''2020-01-07''::date
                             GROUP BY l.id, s.posting_date, l.grant_date');

当我直接把日期放在where s.posting_date = ''2020-01-07''::date时效果很好

但是当我动态接近它时,我总是遇到错误。

我必须通过用户选择的日期,我这样做

WHERE s.posting_date = ''''' +@postingdate+'''''::date

但我总是遇到错误。 (在这段代码中我遇到了一个错误,指出Incorrect syntax near '+'.

谁能帮我解决这个问题?我已经尝试过其他解决方案,但它从来没有奏效。

提前致谢

【问题讨论】:

  • 请编辑您的问题并包含您遇到的错误。您收到错误消息了吗?
  • OPENQUERY 既不支持参数也不支持表达式。您必须动态构建涉及OPENQUERY整个 查询。考虑使用INSERT ... EXECUTE (...) AT ...,它确实支持参数,尽管只使用? 占位符语法。
  • @JeroenMostert 先生有什么替代方案可以代替使用 openquery 吗?

标签: sql-server sql-server-2008 table-valued-parameters openquery


【解决方案1】:

试试

WHERE s.posting_date = ''' + @postingdate +'''

另外, ::date 是什么意思?我不熟悉那个注释。

【讨论】:

  • ::date 是 postgresql 中的转换器
【解决方案2】:

根据this answer,OPENQUERY 的参数不接受变量。

但该答案中发布了一种解决方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多