2009-04-23 70 views
0

我有兩個斷開連接的sql服務器必須在它們之間運行相關查詢。什麼是運行一個查詢,如最好的方法:查詢中的大量sql參數集

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

凡1..100000是IDS我是從其他數據庫獲取和不連續。

IN子句不支持許多參數,並創建一個臨時表上做一個子查詢需要永遠。還有其他選擇嗎?使用Sql Server 2005作爲數據庫,C#作爲我的語言。

鏈接服務器是不是一種選擇。

回答

3

如果可能的話,將它們設置爲鏈接的服務器。然後您可以直接查詢其他服務器。

一旦你有你的鏈接設置,你也應該考慮到一個INNER JOIN或EXISTS可能會表現得更好。

1

語法可能會脫咯,因爲我的服務器到服務器MSSQL是生疏,但...

Select * from table where id in (select id from [Server_Two\Some_Instance].[SomeDatabase].[user].table2) 
+0

他提到他們目前已斷開連接,所以這將無法正常工作。 – 2009-04-23 16:57:25

1

要解決允許在沒有跨服務器查詢IN參數的數量,你可以鬥他們到多個查詢與IDS的子集,並將它們與UNION連接。有點kludgy,但它應該工作。

0

你可以使用一個函數來分解輸入字符串並返回一個表。這裏有很多關於如何在子句中使用動態參數的問題,應該有一個例子。

如果你可以將自己的服務器,你可以在兩個服務器之間的連接。

0

這聽起來好像你已經探索是建立一個臨時表與標識的是將要用作標準的另一種選擇加入主表。

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

因爲他們是ID的我假設他們被索引。

0

你是怎麼生成的?如果是文字,您可以以不同的方式生成它。或者這是否會導致相同的錯誤?

SELECT..... 
WHERE id in (1..10000) 
    OR id in (10001..20000) 
-- etc.