2012-03-16 19 views
0

希望一切都很好。我有一個SQL Server數據庫中有大約491,000條獨特記錄的表。我需要在Oracle數據庫中的另一個表上運行這些記錄。我在Oracle中遇到的問題是它一次可以過濾1000條記錄。下面是該查詢和錯誤:SQL Server中的組ID

SELECT * 
FROM TABLE1 
WHERE ID IN(A LIST OF 1001 RECORDS) 

[Error] Script lines: 1-4 -------------------------- ORA-01795: maximum number of expressions in a list is 1000 Script line 3, statement line 3, column 11017

我可以使用下面的查詢對夫婦一千記錄運行,但不知道如何與491000點的記錄做。

SELECT ID 
FROM TABLE2 
WHERE ( ID IN(LIST OF 1000 RECORDS) 
OR ID IN(LIST OF ANOTHER 1000 RECORDS) 
OR ID IN(LIST OF ANOTHER 1000 RECORDS) 
OR ID IN(LIST OF ANOTHER 1000 RECORDS)) 

有人能幫我解決這個問題嗎?

非常感謝

忘記提及,我沒有privillage在Oracle中創建數據庫表。

+1

有沒有規則的ID?比如1到491000之間? – Aprillion 2012-03-16 17:54:57

+0

你可以選擇oracle中的所有行並在你的應用程序中篩選它們嗎? – Aprillion 2012-03-16 18:00:02

+0

@四月,我現在正在運行查詢。它需要大約兩個小時來拉那些記錄Ahww,ahww – 2012-03-16 18:04:14

回答

1

編輯:

因爲你不能創建在Oracle數據庫中的表,你使用鏈接的服務器從您的SQL Server表直接連接到Oracle表考慮?

-- Adding linked server (from SQL Server Books Online): 
/* sp_addlinkedserver [@server =] 'server' 
    [, [@srvproduct =] 'product_name'] 
    [, [@provider =] 'provider_name'] 
    [, [@datasrc =] 'data_source'] 
    [, [@location =] 'location'] [, [@provstr =] 'provider_string'] 
    [, [@catalog =] 'catalog'] 
*/ 

EXEC sp_addlinkedserver 'Ora817Link', 'Oracle', 'MSDAORA', 'oracle817' 

-- Adding linked server login: 
/* sp_addlinkedsrvlogin [@rmtsrvname =] 'rmtsrvname' 
    [,[@useself =] 'useself'] 
    [,[@locallogin =] 'locallogin'] 
    [,[@rmtuser =] 'rmtuser'] 
    [,[@rmtpassword =] 'rmtpassword'] 
*/ 

EXEC sp_addlinkedsrvlogin 'Ora817Link', 'FALSE',NULL, 'scott', 'tiger' 

那麼這將讓你執行駐留在兩個不同的服務器上的兩個表之間的簡單join

How to set up and troubleshoot a linked server to an Oracle database in SQL Server

你可以使用類似的代碼創建鏈接服務器

SELECT ot.ID 
FROM 
    YourOracleServer...OracleTable ot 
    JOIN SQLServerTable st ON ot.ID = st.ID 
+0

謝謝邁克,我忘記提及,我沒有特權在Oracle數據庫中創建表。 – 2012-03-16 17:54:43

+0

再次感謝Mike,感謝您的快速幫助 – 2012-03-16 18:16:15

+0

這些鏈接的服務器代碼是我的經驗...仍然嘗試完成工作。 – 2012-03-16 18:19:01

0

正如@Aprillion提到的那樣,通常會有一個模式的ID與獲取相關。

假設你有ID對其中的名稱是 '鮑勃',這樣做:

SELECT * 
FROM TABLE1 
WHERE name = 'Bob' 

如果名稱是另一個表,使用子查詢:

SELECT * 
FROM TABLE1 
WHERE ID IN (SELECT ID FROM TABLE2 WHERE name = 'Bob'); 

或連接:

SELECT TABLE1.* 
FROM TABLE1 INNER JOIN TABLE2 ON TABLE1.ID=TABLE2.ID 
WHERE name = 'Bob';