Sql server SQL Server:如何在链接服务器查询中的子查询中使用变量
我试图从PostgresSQL链接的服务器中提取一些信息,但使用本机SQL服务器中的表施加一些条件 理想情况下,它应该是:Sql server SQL Server:如何在链接服务器查询中的子查询中使用变量,sql-server,postgresql,linked-server,Sql Server,Postgresql,Linked Server,我试图从PostgresSQL链接的服务器中提取一些信息,但使用本机SQL服务器中的表施加一些条件 理想情况下,它应该是: SELECT * FROM #transactions AS t LEFT JOIN OPENQUERY(POSTGRES, ' SELECT * FROM commission WHERE ti
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
是链接服务器的名称。由于以下原因,代码无法成功运行:
“+”附近的语法不正确
编辑:表“commission”是一个巨大的表,因此如果我在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
不接受动态构建的查询字符串。将Where
条件置于连接上t.id=c.id和c.timestamp>t.start\u time
@WEI\u DBA我感谢您的输入。在我的例子中,openquery中的表是巨大的,因此如果我在openquery中而不是在外部拥有该条件,这将对我有利。编辑问题以进行澄清。