SQL Server:如何在链接服务器查询中的子查询中使用变量[关闭]

问题描述 投票:0回答:1

我试图从PostgresQL链接服务器中提取一些信息,但是使用本机SQL Server中的表来强加一些条件。

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

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 Server上的临时表,而POSTGRES是链接服务器的名称。由于以下原因,代码无法成功运行

'+'附近的语法不正确

编辑:表“佣金”是一个巨大的表,所以如果我在openquery中包含条件而不是首先拉动所有内容然后做一个过滤器会更好。

sql-server postgresql linked-server
1个回答
1
投票

要在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不接受动态构建的查询字符串。

© www.soinside.com 2019 - 2024. All rights reserved.