SQL Server中的组ID

时间:2012-03-16 17:48:20

标签: sql

希望一切顺利。我有一个SQL表服务器数据库中有大约491,000个唯一记录的表。我需要针对Oracle数据库中的另一个表运行这些记录。我在Oracle中遇到的问题是它可以一次过滤1000条记录。这是查询及其错误:

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

[错误]脚本行:1-4 --------------------------    ORA-01795:列表中的最大表达式数为1000    脚本第3行,第3行,第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))

有人能帮我解决这个问题吗?

非常感谢

忘了提一下,我没有在Oracle数据库中创建表的权限。

2 个答案:

答案 0 :(得分:1)

修改

由于您无法在Oracle数据库中创建表,您是否考虑过使用链接服务器直接从SQL Server表加入Oracle表?

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

您可以使用类似于:

的代码创建链接服务器
-- 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

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

答案 1 :(得分:0)

正如@Aprillion提到的那样,通常会有一种模式与ID相关。

假设您有名称为'Bob'的ID,请执行以下操作:

SELECT * 
FROM TABLE1
WHERE name = 'Bob'

如果name在另一个表中,请使用子查询:

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';