MSSQL中实现循环遍历表记录的方法(mssql 循环 表记录)
MSSQL中实现循环遍历表记录的方法
Microsoft SQL Server(MSSQL) 是企业内部最为流行的关系型数据库,在MSSQL中要实现循环遍历表记录,我们可以使用以下三种技术:Cursros、while循环和Recursive CTE(Common Table Expression)。
#### Cursor
Cursor 是游标,它是SQL引擎用于保存已定位到某个位置的记录集的技术。使用Cursor可以对表中的记录进行逐条处理,像Organizing files 和printing reports一样的操作。下面的代码示例使用Cursor来循环遍历 Employees表中的记录:
“`sql
Declare @Ename varchar(50)
DECLARE cur CURSOR LOCAL for
SELECT FirstName+ ‘ ‘ +LastName
From Employees
OPEN cur
FETCH NEXT FROM cur INTO @Ename
WHILE @@FETCH_STATUS = 0
BEGIN
— 这里进行逐条处理
select @Ename
FETCH NEXT FROM cur INTO @Ename
END
CLOSE cur
DEALLOCATE cur
#### While循环
while 循环需要利用游标对表中记录进行逐条读取,它与Cursor不同点在于,SQL服务器可以把游标隐式操作,省去了在程序中显式声明游标的工作。示例代码如下:
```sqlDeclare @Ename varchar(50)
Declare @Counter int
select @Counter = 1
WHILE @Counter BEGIN
SELECT @Ename = FirstName+ ' ' +LastName From Employees
WHERE employeeID = @Counter
-- 在这里进行逐条处理 SELECT @Ename
SET @Counter = @Counter + 1
END
#### 递归CTE
Common Table Expression(CTE)实现了对表的查询,在其中还可以实现递归应用,以便查询树结构或深层结构中的数据。但是这种方法存在性能问题,因此最好在实现功能的前提下,使用了更为高效的方法。示例代码如下:
“`sql
WITH _tblEname as (
SELECT employeedID, FirstName+ ‘ ‘ +LastName from Employees where employeedID = 1
UNION ALL
SELECT e.’employeedID’, e.’FirstName’+ ‘ ‘ +e.’LastName’ FROM Employees e
INNER JOIN _tblEname on e.’parentID’=_tblEname.’employeedID’
)
SELECT * from _tblEname
总之,MSSQL提供了Cursor、while循环和Recursive CTE三种技术实现循环遍历表记录,用户可以根据自身的应用需求,选择更为适合的方式来实现。