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
不接受动态构建的查询字符串。
我正在尝试从 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
不接受动态构建的查询字符串。