Sql 在表格中循环选择100行,然后选择下100行..以此类推
我在SQL Server中有一个表,其中包含项的ID,并且它们在该表中不是唯一的。我正试图将其传递给一个Sql 在表格中循环选择100行,然后选择下100行..以此类推,sql,sql-server,Sql,Sql Server,我在SQL Server中有一个表,其中包含项的ID,并且它们在该表中不是唯一的。我正试图将其传递给一个openquery,以便从oracle获取这些项目的附加信息 该表一次可以有5000-17000行。我尝试将该列的所有行转换为逗号分隔的字符串,然后将其传递给打开的查询 declare @results varchar(max) set @results = (select stuff([list],1,3,'') as stuff_list from (se
openquery
,以便从oracle获取这些项目的附加信息
该表一次可以有5000-17000行。我尝试将该列的所有行转换为逗号分隔的字符串,然后将其传递给打开的查询
declare @results varchar(max)
set @results = (select stuff([list],1,3,'') as stuff_list
from (select '''''' + ',' + '''''' + cast(itemId as varchar(10)) as [text()]
from ItemTable sub
order by itemId asc
for xml path('')) sub_query([list]) )
然后将其传递给openquery
DECLARE @SQL varchar(max)
SET @SQL = @SQL + 'SELECT * FROM OPENQUERY(op, ''SELECT * FROM ITEM_INFO WHERE ITEM_CODE IN('+@results+')'')'
--SET @SQL = @SQL + 'WHERE ITEM_CODE IN(' + @results +')'
EXEC (@SQL)
我得到:
以“SELECT*FROM…”开头的字符串太长。最大长度为8000
因此,我认为我可以循环遍历表,一次选择100行,然后将其传递给打开的查询,以此类推。实现这一点的最佳方法是什么?您可以利用[LinkedServer]上的EXEC来克服8000个字符的限制 在这里,数据类型是MAX数据类型,因此您没有8000个字符的问题 @string_variable是局部变量的名称@字符串_变量可以 可以是任何char、varchar、nchar或nvarchar数据类型。其中包括 (最大)数据类型
DECLARE@SQL varchar(最大值)
SET@SQL='SELECT*FROM ITEM_INFO,其中ITEM_编码在('+@results+')中
执行(@SQL)操作
参考资料
- 还可以动态传递参数
plsql
标记实际上不属于这里。PL/SQL是Oracle过程SQL语言的“方言”……表没有“记录”;它们有行和列。请始终在标记中指定版本。如果这是SQL Server的早期版本,则可以使用offset_fetch。在某些时候,您最好只运行SELECT*FROM ITEM\u INFO
并在SQL Server端进行筛选。