网站建设运营工作业绩,鸿梦社区wordpress,ui网页设计高手,发布做任务网站SQL Server遍历表一般都要用到游标#xff0c;SQL Server中可以很容易的用游标实现循环#xff0c;实现SQL Server遍历表中记录。本文将介绍利用使用表变量和游标实现数据库中表的遍历。表变量来实现表的遍历以下代码中#xff0c;代码块之间的差异已经用灰色的背景标记。DE…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 tempVALUES ( a )INSERT INTO tempVALUES ( b )INSERT INTO tempVALUES ( c )INSERT INTO tempVALUES ( d )INSERT INTO tempVALUES ( e )WHILE EXISTS ( SELECT [id]FROM temp )BEGINSET ROWCOUNT 1SELECT tempId [id] ,tempName [Name]FROM tempSET ROWCOUNT 0--delete from temp where [id] tempIdPRINT Name:---- tempNameEND但是这种方法必须借助ROWCOUNT。但是使用 SET ROWCOUNT 将可能会影响 DELETE、INSERT 和 UPDATE 语句。所以修改上面WHILE循环改用TOP来选出首条记录。WHILE EXISTS ( SELECT [id]FROM temp )BEGINSELECT TOP 1tempId [id] ,tempName [Name]FROM tempDELETE FROM tempWHERE [id] tempIdSELECT *FROM tempEXEC(drop table )PRINT Name:---- tempNameEND这种方法也存在一个问题需要将遍历过的行删除事实上我们在实际应用中可能并不想要遍历完一行就删除一行。利用游标来遍历表游标是非常邪恶的一种存在使用游标经常会比使用面向集合的方法慢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 FORSELECT [id],[name] FROM temp--插入数据值INSERT INTO tempVALUES ( a )INSERT INTO tempVALUES ( b )INSERT INTO tempVALUES ( c )INSERT INTO tempVALUES ( d )INSERT INTO tempVALUES ( e )--打开游标OPEN test_CursorWHILE FETCH_STATUS 0BEGINFETCH NEXT FROM test_Cursor INTO tempId,tempnamePRINT Name:---- tempNameENDCLOSE test_CursorDEALLOCATE test_Cursor