sql - Offset 和 Fetch Next 可以在循环中使用吗?

标签 sql sql-server loops stored-procedures

我需要编写一个循环来将 SQL 临时表上的数据一一传递给存储过程。可以使用以下方法吗?它需要大量内存吗?

DECLARE @SomeData AS TABLE(
    Id      INT,
    Name    VARCHAR(MAX),
    Age     INT
)

INSERT INTO @SomeData
        ( Id, Name, Age )
VALUES  ( 1, 'AAAAA', 10 ),
        ( 2, 'BBBBB', 12 ),
        ( 3, 'CCCCC', 13 ),
        ( 4, 'DDDDD', 14 ),
        ( 5, 'EEEEE', 15 );

DECLARE @iterator INT = 0

WHILE @iterator< (SELECT COUNT(Id) FROM @SomeData)
BEGIN
    SELECT * 
    FROM @SomeData
    ORDER BY Id 
    OFFSET @iterator ROWS
    FETCH NEXT 1 ROWS ONLY

    SET @iterator +=1


    /*Execute a Stored Procedure*/
END

最佳答案

我认为一段时间后您不需要再次 (SELECT COUNT(Id) FROM @SomeData) ,如果表 SomeData 是大数据,它会变慢。你可以这样试试:

DECLARE @iterator INT = 0
declare @n int = (SELECT COUNT(Id) FROM @SomeData)
WHILE @iterator< @n
BEGIN
    SELECT * 
    FROM @SomeData
    ORDER BY Id 
    OFFSET @iterator ROWS
    FETCH NEXT 1 ROWS ONLY

    SET @iterator +=1


    /*Execute a Stored Procedure*/
END

关于sql - Offset 和 Fetch Next 可以在循环中使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46482044/

相关文章:

SQL更改值

sql - Select min 返回空行

sql - 我应该如何设置 "marital status"字段的类型?

Java Sockets——实时传输

java - 尝试打破Java中的while循环

java - 生成 1 到 100 之间的 1 到 300 个数字并将每个数字放入字符串中时遇到问题

mysql - 如何在具有不同参数和别名的列中执行 SELECT?

mysql - 优化 SELECT count(DISTINCT ip)

sql - Oracle - REGEXP_SUBSTR 前导零被忽略的问题

sql-server - 连接两个表以获得特定格式的第三列