SQL 服务器:如何在链接服务器查询的子查询中使用变量

SQL Server : how to use a variable in subquery within a linked server query

我正在尝试从 PostgresSQL 链接服务器中提取一些信息,但使用来自本机 SQL 服务器的 table 强加了一些条件。

理想情况下应该是这样的:

SELECT *
FROM #transactions AS t
LEFT JOIN OPENQUERY(POSTGRES, '
                              SELECT *
                              FROM commission
                              WHERE timestamp > ''' SELECT start_time FROM #t '''
                              ')
ON t.id = c.id

其中 #transactions#t 是 SQL 服务器上的临时 table,而 POSTGRES 是链接服务器的名称。由于

,代码无法运行成功

Incorrect syntax near '+'

编辑:table "commission" 是一个巨大的 table 所以如果我在 openquery 中包含条件而不是先提取所有内容然后再进行过滤会更好。

要在 OPENQUERY 调用中使用变量值,您需要使用额外的复杂层。基本上,您需要在变量中创建动态 SQL,然后 EXEC 即动态 SQL。像这样,在你的情况下:

DECLARE @SQL varchar(4000), -- whatever your query needs
    @StartTime datetime;

SELECT @StartTime = start_time FROM #t

SET @SQL = 'SELECT *
FROM #transactions AS t
LEFT JOIN OPENQUERY(POSTGRES, ''
                              SELECT *
                              FROM commission
                              WHERE timestamp > ''''' + @StartTime + '''''
                              '')
ON t.id = c.id'

EXEC(@SQL)

这是你最好的选择,因为 OPENQUERY 不接受动态构建的查询字符串。