SQL Server中遍历表中记录的方法

遍历表有下面几种方法


1、使用游标

2、使用表变量

3、使用临时表

下面通过一个实例分别介绍三中方法的实现:

1、需求


给HR.Employees表,fullname 列赋值,其值为 firstname+lastname

为了演示表的遍历,忽略 UPDATE HR.Employees
SET fullname= firstname+‘ ‘+lastname; 的实现方式

2、使用游标

使用游标的代码主要有以下几个步骤,声明游标,打开游标,使用游标,关闭游标和释放游标。

-- 方法1:游标
-- 声明变量
DECLARE
    @empid AS INT,
    @firstname AS NVARCHAR(10),
    @lastname AS NVARCHAR(20);
    
-- 声明游标
DECLARE C_Employees CURSOR FAST_FORWARD FOR
    SELECT empid,firstname,lastname 
    FROM HR.Employees
    ORDER BY empid;
    
OPEN C_Employees;
-- 取第一条记录
FETCH NEXT FROM C_Employees INTO @empid,@firstname,@lastname;
WHILE @@FETCH_STATUS=0
BEGIN
    -- 操作
    UPDATE HR.Employees SET fullname= @firstname+‘ ‘[email protected] WHERE [email protected];
    
    -- 取下一条记录
    FETCH NEXT FROM C_Employees INTO @empid,@firstname,@lastname;
END
-- 关闭游标
CLOSE C_Employees;
-- 释放游标
DEALLOCATE C_Employees;

3、使用表变量

-- 方法2:使用表变量
-- 声明表变量
DECLARE @temp TABLE
(
    empid INT,
    firstname NVARCHAR(10),
    lastname NVARCHAR(20)
);
-- 将源表中的数据插入到表变量中
INSERT INTO @temp(empid, firstname, lastname )
SELECT empid,firstname,lastname FROM HR.Employees
ORDER BY empid;
-- 声明变量
DECLARE
    @empid AS INT,
    @firstname AS NVARCHAR(10),
    @lastname AS NVARCHAR(20);
    
WHILE EXISTS(SELECT empid FROM @temp)
BEGIN
    -- 也可以使用top 1
    SET ROWCOUNT 1
    SELECT @empid= empid, @firstname= firstname,@lastname= lastname FROM @temp;
    UPDATE HR.Employees SET fullname= @firstname+‘ ‘[email protected] WHERE [email protected];
    SET ROWCOUNT 0
    
    DELETE FROM @temp WHERE [email protected];
END

4、使用临时表

-- 方法3:使用临时表
-- 创建临时表
IF OBJECT_ID(‘tempdb.dbo.#tempemployees‘,‘U‘) IS NOT NULL DROP TABLE dbo.#tempemployees;
GO
SELECT empid,firstname,lastname 
INTO dbo.#tempemployees
FROM HR.Employees
ORDER BY empid;
--SELECT * FROM dbo.#tempemployees;
-- 声明变量
DECLARE
    @empid AS INT,
    @firstname AS NVARCHAR(10),
    @lastname AS NVARCHAR(20);
    
WHILE EXISTS(SELECT empid FROM dbo.#tempemployees)
BEGIN
    -- 也可以使用top 1
    SET ROWCOUNT 1
    SELECT @empid= empid, @firstname= firstname,@lastname= lastname FROM dbo.#tempemployees;
    UPDATE HR.Employees SET fullname= @firstname+‘ ‘[email protected] WHERE [email protected];
    SET ROWCOUNT 0
    
    DELETE FROM dbo.#tempemployees WHERE [email protected];
END

参考资料:  SQL Server遍历表中记录的方法   http://www.studyofnet.com/news/832.html

时间: 2024-10-07 09:53:37

SQL Server中遍历表中记录的方法的相关文章

SQL Server中如何实现遍历表的记录

SQL Server遍历表一般都要用到游标,SQL Server中可以很容易的用游标实现循环,实现SQL Server遍历表中记录. 但游标在实际的开发中都不推荐使用. 我们知道还可以借助临时表或表变量等来实现SQL Server遍历表 下例为用表变量来实现简单的循环: (直接复制到查询分析器中运行即可)1.           declare @temp table   2.           (   3.              [id] int IDENTITY(1,1),   4. 

Sql Server删除数据表中重复记录 三种方法

本文介绍了Sql Server数据库中删除数据表中重复记录的方法. [项目]数据库中users表,包含u_name,u_pwd两个字段,其中u_name存在重复项,现在要实现把重复的项删除![分析]1.生成一张临时表new_users,表结构与users表一样:2.对users表按id做一个循环,每从users表中读出一个条记录,判断new_users中是否存在有相同的u_name,如果没有,则把它插入新表:如果已经有了相同的项,则忽略此条记录:3.把users表改为其它的名称,把new_use

SQL Server遍历表的几种方法 转载

SQL Server遍历表的几种方法 阅读目录 使用游标 使用表变量 使用临时表 在数据库开发过程中,我们经常会碰到要遍历数据表的情形,一提到遍历表,我们第一印象可能就想到使用游标,使用游标虽然直观易懂,但是它不符合面向集合操作的原则,而且性能也比面向集合低.当然,从面向集合操作的角度出发,也有两种方法可以进行遍历表的操作,总结起来,遍历表有下面几种方法. 使用游标 使用表变量 使用临时表 我的需求是:针对HR.Employees表,新增一列fullname,并取值firstname+lastn

如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?

如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?(2006-12-14 09:25:36) 与这个问题具有相同性质的其他描述还包括:如何在SQL Server存储过程中获取另一存储过程的执行结果记录集?如何在存储过程中检索动态SQL语句的执行结果?如何实现类似SELECT * FROM (EXEC procedure_name @parameters_var) AS datasource ... 的功能?procedure_

添加条码生成和打印功能到SQL Server Reporting Services report 中

Barcode Professional for Reporting Services 是一款灵活和强大的.NET组件(.NET DLL 类库),它让您轻松地添加条码生成和打印功能到您的SQL Server Reporting Services report 中.支持几乎所有当前常用的条码:Code 39, Code 128, GS1-128, GS1 DataBar (RSS-14), EAN 13 & UPC, Postal (USPS, British Royal Mail, Austra

Sql Server 2005 去掉字段中的空格

SELECT replace(ltrim(rtrim(Realname)),' ','') AS Realname FROM UserInfo WHERE replace(ltrim(rtrim(Realname)),' ','') ='张飞' Sql Server 2005 去掉字段中的空格,布布扣,bubuko.com

SET STATISTICS IO和SET STATISTICS TIME 在SQL Server查询性能优化中的作用

原文:SET STATISTICS IO和SET STATISTICS TIME 在SQL Server查询性能优化中的作用 近段时间以来,一直在探究SQL Server查询性能的问题,当然也漫无目的的查找了很多资料,也从网上的大神们的文章中学到了很多,在这里,向各位大神致敬.正是受大神们无私奉献精神的影响,所以小弟也作为回报,分享一下关于SET STATISTICS IO和SET STATISTICS TIME这两条T_SQL命令,在查询优化性能中的作用. 首先我想说明一下这篇文章不是关于如何

【半转贴】解决SQL SERVER 2008数据库表中修改字段后不能保存

SQL SERVER 2008数据库表中修改字段后不能保存,这种情况将阻止保存要求重新创建表的更改一项的钩钩去掉就OK了 找到工具>选项>Designers>表设计器和数据库设计器 然后将“阻止保存要求重新创建表的更改” 的这一项的钩钩去掉就OK了 图片来自:http://www.jb51.net/article/42727.htm 刚好碰到这个问题,用的就是上面的方法解决的 [半转贴]解决SQL SERVER 2008数据库表中修改字段后不能保存

解决VS2010在新建实体数据模型出现“在 .NET Framework Data Provider for Microsoft SQL Server Compact 3.5 中发生错误。请与提供程序供应商联系以解决此问题。”的问题

最近想试着学习ASP.NET MVC,在点击 添加--新建项--Visual C#下的数据中的ADO.NET 实体数据模型,到"选择您的数据连接"时,出现错误,"在 .NET Framework Data Provider for Microsoft SQL Server Compact 3.5 中发生错误.请与提供程序供应商联系以解决此问题.",这里写下,以防自己忘记. 网上查了一下,说是重新安装一下 .NET Compact Framework 3.5,http