Sql 使用循环从链接服务器获取数据

Sql 使用循环从链接服务器获取数据,sql,sql-server,linked-server,openquery,Sql,Sql Server,Linked Server,Openquery,在my DB is a table TodayID中,一个表包含400000多行,我正在寻找一种方法/示例,使用循环将数据从链接服务器加载到DB MSSQL中,而每个ID都有。 我在中使用了,但在openquery中遇到一个错误,使用EXEC AT时超过8000个字符,调优RPC、RPC out并没有解决问题 DECLARE @SQL VARCHAR(MAX) DECLARE @ID VARCHAR(MAX) DECLARE @resTable TABLE(ID VARCHAR(50), NA

在my DB is a table TodayID中,一个表包含400000多行,我正在寻找一种方法/示例,使用循环将数据从链接服务器加载到DB MSSQL中,而每个ID都有。 我在中使用了,但在openquery中遇到一个错误,使用EXEC AT时超过8000个字符,调优RPC、RPC out并没有解决问题

DECLARE @SQL VARCHAR(MAX)
DECLARE @ID  VARCHAR(MAX)
DECLARE @resTable TABLE(ID VARCHAR(50), NAME VARCHAR(100), DTIME DATETIME, FIELD VARCHAR(100))
SET @ID = (STUFF((SELECT ',' + '''''' + [ID] + '''''' FROM [TodayID] FOR XML PATH('')) ,1,1,'') )  
Print @ID
SET @SQL='SELECT * FROM OPENQUERY(RemoteServer, ''SELECT ID, NAME, DTIME, FIELD FROM AUDIT WHERE ID IN (' + @ID + ')  '')'
Print @SQL
INSERT INTO @resTable EXEC (@SQL)
select * from @resTable

如果要通过WHILE循环读取表行,下面的查询将帮助您。但是,ID列的值必须按顺序排列

DECLARE @SQL VARCHAR(MAX)
DECLARE @ID  VARCHAR(MAX)
DECLARE @Counter AS INT
DECLARE @MaxCounter AS INT

DECLARE @resTable TABLE(ID VARCHAR(50), NAME VARCHAR(100), DTIME DATETIME, FIELD VARCHAR(100))
--SET @ID = (STUFF((SELECT ',' + '''''' + [ID] + '''''' FROM [TodayID] FOR XML PATH('')) ,1,1,'') )  

SELECT @Counter = MIN(ID) FROM [TodayID]
SELECT @MaxCounter=MAX(ID) FROM [TodayID]

WHILE(@Counter IS NOT NULL
      AND @Counter <= @MaxCounter)

      BEGIN
SET @SQL='SELECT * FROM OPENQUERY(RemoteServer, ''SELECT ID, NAME, DTIME, FIELD FROM AUDIT WHERE ID IN (' + CONVERT(VARCHAR,@Counter) + ')  '
Print @SQL
INSERT INTO @resTable EXEC (@SQL)
SET @Counter  = @Counter  + 1        --According to your id gap
END
select * from @resTable

首先,为什么要使用一段时间?您可以只使用一个由4部分组成的名称,然后在本地select*from中进行一次插入,而不使用任何这些,不是吗?