Это не лучший подход с точки зрения производительности, но вы можете отфильтровать SQL Server
сторону:
string query = "SELECT *
FROM OPENQUERY(linked_server, 'SELECT * FROM User.Table') s
WHERE col1 = @parameter1";
РЕДАКТИРОВАТЬ:
Из Как передать переменную в запрос связанного сервера:
Когда вы запрашиваете связанный сервер, вы часто выполняете сквозной запрос, который использует оператор OPENQUERY, OPENROWSET или OPENDATASOURCE.
В этой статье представлены три примера того, как передать переменную в запрос связанного сервера.
Чтобы передать переменную в одну из функций передачи, необходимо создать динамический запрос.
Подход 1:
Передавать основные значения
Если базовая инструкция Transact-SQL известна, но вам необходимо передать одно или несколько конкретных значений, используйте код, аналогичный приведенному в следующем примере:
DECLARE @TSQL varchar(8000), @VAR char(2)
SELECT @VAR = 'CA'
SELECT @TSQL = 'SELECT * FROM OPENQUERY(MyLinkedServer
,''SELECT * FROM pubs.dbo.authors WHERE state = '''''
+ @VAR + ''''''')'
EXEC (@TSQL)
Подход 2:
Используйте хранимую процедуру Sp_executesql
Чтобы избежать многослойных кавычек, используйте код, похожий на следующий пример:
DECLARE @VAR char(2)
SELECT @VAR = 'CA'
EXEC MyLinkedServer.master.dbo.sp_executesql
N'SELECT * FROM pubs.dbo.authors WHERE state = @state',
N'@state char(2)',
@VAR
и в вашем примере:
DECLARE @parameter1 <your_type> = ?;
EXEC linked_server.master.dbo.sp_executesql
@'SELECT * FROM User.Table WHERE col1 = @parameter1 '
,N'@parameter1 <your_type>'
,@parameter1;
Если вам нужно выполнить другую операцию на локальной стороне:
DECLARE @parameter1 <your_type> = ?;
CREATE #temp(col_name <type>, ...);
INSERT INTO #temp(col_name)
EXEC linked_server.master.dbo.sp_executesql
@'SELECT col_name1,... FROM User.Table WHERE col1 = @parameter1 '
,N'@parameter1 <your_type>'
,@parameter1;
SELECT *
FROM #temp
-- JOIN any local table (SQL Server's side)
-- WHERE any_condition;
person
Lukasz Szozda
schedule
25.04.2018