SQL Server 用于迭代使用While循环替换游标的TSQL查询[已关闭]

iqxoj9l9  于 2022-12-17  发布在  其他
关注(0)|答案(1)|浏览(102)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。

3天前关闭。
Improve this question
我有下面的代码,我试图取代光标,我想迭代通过每个文件ID一个接一个,并分配该单一文件ID的输出每次给变量@fil,但它打印所有迭代的一切。探索了许多论坛,但无法找到解决方案。我知道光标的解决方案,但这对我来说是新的!

DECLARE @i INT = 0;
DECLARE @count INT, @fil varchar(100) 
SELECT @count=  COUNT(DISTINCT m.FileID)
FROM [EDW].[FileMaster] m 

WHILE @i <= @count
BEGIN
       
    @filid = SELECT DISTINCT m.FileID 
FROM [EDW].[FileMaster] m
    --OFFSET @i ROWS   
    --FETCH NEXT 1 ROWS ONLY  
    SET @i = @i + 1;
print @fileid
END

预期输出为abc.txt def.txt ghi.txt etc
请帮帮我!先谢了。

uurv41yg

uurv41yg1#

您可以尝试这样做,但您忽略了SQL的全部要点...

DECLARE @i INT = 0; 
DECLARE @count INT = COUNT(DISTINCT FileID) FROM [EDW].[FileMaster]);
DECLARE @fil varchar(100);

WHILE @i <= @count 
BEGIN 
SET @fil = SELECT DISTINCT FileID FROM [EDW].[FileMaster] 
ORDER BY FileID OFFSET @i ROWS FETCH NEXT 1 ROWS ONLY
SET @i = @i + 1; 
print @fil 
END;

您可以创建一个具有不同FileID的临时表一次,然后循环使用它

相关问题