我有两个断开连接的sql服务器,它们之间必须运行相关的查询。运行查询的最佳方式是:
select * from table where id in (1..100000)
如果1..100000是我从其他数据库获取的ID并且不是连续的。
in子句不支持那么多参数,并且创建一个临时表来执行子查询需要永远。还有其他选择吗?使用Sql Server 2005作为数据库,C#作为我的语言。
无法选择链接服务器。
答案 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.