我试图从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中包含条件而不是首先拉动所有内容然后做一个过滤器会更好。
要在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
不接受动态构建的查询字符串。