查询中有大量的sql参数

时间:2009-04-23 16:50:05

标签: sql-server

我有两个断开连接的sql服务器,它们之间必须运行相关的查询。运行查询的最佳方式是:

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

如果1..100000是我从其他数据库获取的ID并且不是连续的。

in子句不支持那么多参数,并且创建一个临时表来执行子查询需要永远。还有其他选择吗?使用Sql Server 2005作为数据库,C#作为我的语言。

无法选择链接服务器。

6 个答案:

答案 0 :(得分:3)

如果可能,请将它们设置为链接服务器。然后,您可以直接查询其他服务器。

设置链接后,您还应该考虑内部联接或EXESTS可能会有更好的效果。

答案 1 :(得分:1)

语法可能略有不同,因为我的服务器到服务器MSSQL生锈了,但是......

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

答案 2 :(得分:1)

要解决在不跨服务器查询的情况下允许的IN参数数量,可以将它们存储到具有ID子集的多个查询中,并使用UNION连接它们。有点kludgy,但它应该工作。

答案 3 :(得分:0)

您可以使用函数来分解输入字符串并返回表。这里有很多关于如何使用in子句创建动态参数的问题,这些参数应该有一个例子。

如果您可以链接服务器,则可以在两台服务器之间加入。

答案 4 :(得分:0)

您听过的其他选项是创建一个带有id的临时表,它将用作 join 到主表的条件。

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

因为他们是ID,我假设他们被编入索引。

答案 5 :(得分:0)

你是如何产生的?如果是文本,则可以以不同方式生成它。或者这会导致同样的错误吗?

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