手机
当前位置:查字典教程网 >编程开发 >mssql数据库 >SQL Server遍历表中记录的2种方法(使用表变量和游标)
SQL Server遍历表中记录的2种方法(使用表变量和游标)
摘要:SQLServer遍历表一般都要用到游标,SQLServer中可以很容易的用游标实现循环,实现SQLServer遍历表中记录。本文将介绍利用...

SQL Server遍历表一般都要用到游标,SQL Server中可以很容易的用游标实现循环,实现SQL Server遍历表中记录。本文将介绍利用使用表变量和游标实现数据库中表的遍历。

表变量来实现表的遍历

以下代码中,代码块之间的差异已经用灰色的背景标记。

复制代码 代码如下:

DECLARE @temp TABLE

(

[id] INT IDENTITY(1, 1) ,

[Name] VARCHAR(10)

)

DECLARE @tempId INT ,

@tempName VARCHAR(10)

INSERT INTO @temp

VALUES ( 'a' )

INSERT INTO @temp

VALUES ( 'b' )

INSERT INTO @temp

VALUES ( 'c' )

INSERT INTO @temp

VALUES ( 'd' )

INSERT INTO @temp

VALUES ( 'e' )

WHILE EXISTS ( SELECT [id]

FROM @temp )

BEGIN

SET ROWCOUNT 1

SELECT @tempId = [id] ,

@tempName = [Name]

FROM @temp

SET ROWCOUNT 0

--delete from @temp where [id] = @tempId

PRINT 'Name:----' + @tempName

END

但是这种方法,必须借助ROWCOUNT。但是使用 SET ROWCOUNT 将可能会影响 DELETE、INSERT 和 UPDATE 语句。

所以修改上面WHILE循环,改用TOP来选出首条记录。

复制代码 代码如下:

WHILE EXISTS ( SELECT [id]

FROM @temp )

BEGIN

SELECT TOP 1

@tempId = [id] ,

@tempName = [Name]

FROM @temp

DELETE FROM @temp

WHERE [id] = @tempId

SELECT *

FROM @temp

EXEC('drop table '+)

PRINT 'Name:----' + @tempName

END

这种方法也存在一个问题,需要将遍历过的行删除,事实上,我们在实际应用中可能并不想要遍历完一行就删除一行。

利用游标来遍历表

游标是非常邪恶的一种存在,使用游标经常会比使用面向集合的方法慢2-3倍,当游标定义在大数据量时,这个比例还会增加。如果可能,尽量使用while,子查询,临时表,函数,表变量等来替代游标,记住,游标永远只是你最后无奈之下的选择,而不是首选。

复制代码 代码如下:

--定义表变量

DECLARE @temp TABLE

(

[id] INT IDENTITY(1, 1) ,

[Name] VARCHAR(10)

)

DECLARE @tempId INT ,

@tempName VARCHAR(10)

DECLARE test_Cursor CURSOR LOCAL FOR

SELECT [id],[name] FROM @temp

--插入数据值

INSERT INTO @temp

VALUES ( 'a' )

INSERT INTO @temp

VALUES ( 'b' )

INSERT INTO @temp

VALUES ( 'c' )

INSERT INTO @temp

VALUES ( 'd' )

INSERT INTO @temp

VALUES ( 'e' )

--打开游标

OPEN test_Cursor

WHILE @@FETCH_STATUS = 0

BEGIN

FETCH NEXT FROM test_Cursor INTO @tempId,@tempname

PRINT 'Name:----' + @tempName

END

CLOSE test_Cursor

DEALLOCATE test_Cursor

【SQL Server遍历表中记录的2种方法(使用表变量和游标)】相关文章:

SQL Server 2005中更改sa的用户名的方法

更改SQL Server 2005数据库中tempdb位置的方法

SQL Server 游标使用

Sql Server中REPLACE函数的使用

SQLServer中的事务和锁

SQLServer 批量插入数据的两种方法

SQL server 2005中设置自动编号字段的方法

在SQL Server中将数据导出为XML和Json的方法

SQL Server 2005 中使用 Try Catch 处理异常

SQL Server 2005 中做全文检索的方法分享

精品推荐
分类导航