Большие наборы параметров SQL в запросе - PullRequest
0 голосов
/ 23 апреля 2009

У меня есть два отключенных сервера sql, между которыми должны выполняться коррелированные запросы. Каков наилучший способ выполнить запрос, такой как:

select * from table where id in (1..100000)

Где 1..100000 - это идентификаторы, которые я получаю из другой базы данных, и они не являются смежными.

Предложение in не поддерживает такое количество параметров, и создание временной таблицы для выполнения подзапроса занимает вечность. Есть ли другие варианты? Использование Sql Server 2005 в качестве базы данных, C # в качестве моего языка.

Соединение серверов не вариант.

Ответы [ 6 ]

3 голосов
/ 23 апреля 2009

Если возможно, настройте их как связанные серверы. Затем вы можете запросить другой сервер напрямую.

После того, как вы настроите ссылку, вы также должны учитывать, что INNER JOIN или EXISTS, вероятно, будут работать лучше.

1 голос
/ 23 апреля 2009

Чтобы обойти количество разрешенных параметров IN без запросов к серверам, вы можете объединить их в несколько запросов с подмножествами идентификаторов и связать их с UNION. Вроде клудги, но должно работать.

1 голос
/ 23 апреля 2009

Синтаксис может быть немного отключен, так как мой сервер MSSQL ржавый, но ...

Select * from table where id in (select id from [Server_Two\Some_Instance].[SomeDatabase].[user].table2)
0 голосов
/ 23 апреля 2009

Как вы генерируете в? Если это текст, вы можете сгенерировать его по-другому. Или это вызывает ту же ошибку?

 SELECT.....
 WHERE id in (1..10000)
    OR id in (10001..20000)
 -- etc.
0 голосов
/ 23 апреля 2009

Другой вариант, который, как вам кажется, вы исследовали, - это создание временной таблицы с идентификаторами, которые будут использоваться в качестве критерия для присоединения к основной таблице.

select * from atable a
inner join #temptable t on a.id = t.id

Так как они ID, я предполагаю, что они проиндексированы.

0 голосов
/ 23 апреля 2009

Вы можете использовать функцию, чтобы разбить входную строку и вернуть таблицу. Здесь есть много вопросов о том, как иметь динамические параметры в выражениях in, которые должны иметь пример.

Если вы можете связать свои серверы, вы можете объединить два сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...