Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server:如何在链接服务器查询中的子查询中使用变量_Sql Server_Postgresql_Linked Server - Fatal编程技术网

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

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

我试图从PostgresSQL链接的服务器中提取一些信息,但使用本机SQL服务器中的表施加一些条件

理想情况下,它应该是:

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中而不是在外部拥有该条件,这将对我有利。编辑问题以进行澄清。