我在远程sql server数据库中有一个包含超过100000条记录的customer表。
Customer table
--------------
ID
Name
Phone
Occupation
Gender
我还有4000个客户ID的列表。
从远程sql server获取客户数据并使用.NET中的DataTable保存到本地sql数据库的最快方法是什么。
我也会对任何不同的方式感兴趣。
我尝试了什么:
我使用了IN语句,但是当id超过3000时会抛出错误:
select * from customertable where id in ('CUS1','CUS2','CUS3','CUS4','CUS5',....'CUS4000')
我会在临时表中插入客户ID并加入,但这两个数据库不在同一服务器上托管。
答案 0 :(得分:0)
只有一个选项是解析您的列表并执行连接。 如果是2016 +,,您可以使用string_split()。
Declare @List varchar(max) = 'CUS1,CUS2,CUS3,CUS4,CUS5,CUS6,CUS7,CUS8,CUS9,...'
Select A.*
From customertable A
Join (
Select RetVal = B2.i.value('(./text())[1]', 'varchar(max)')
From (Select x = Cast('<x>' + replace(@List,',','</x><x>')+'</x>' as xml).query('.')) as B1
Cross Apply x.nodes('x') AS B2(i)
) B on A.ID=B.RetVal
修改强>
我对你的设计有点困惑,但是tou可以用这样的东西生成@List。
Declare @List varchar(max) = (Select Stuff((Select ',' +ID From #YourTemp For XML Path ('')),1,1,'') )