从远程sql server获取记录并使用DataTable

时间:2018-05-23 14:18:49

标签: .net sql-server

我在远程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并加入,但这两个数据库不在同一服务器上托管。

1 个答案:

答案 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,'') )