• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    SQL Server遍历表中记录的2种方法(使用表变量和游标)
    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
    您可能感兴趣的文章:
    • SQLServer中临时表与表变量的区别分析
    • sql server创建临时表的两种写法和删除临时表
    • sqlserver 临时表的用法
    • sql server 临时表 查找并删除的实现代码
    • 浅析SQL server 临时表
    • sqlserver中遍历字符串的sql语句
    • SQLServer用存储过程实现插入更新数据示例
    • SQL Server如何通过创建临时表遍历更新数据详解
    上一篇:简化SQL Server备份与还原到云工作原理及操作方法
    下一篇:sql server创建复合主键的2种方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    SQL Server遍历表中记录的2种方法(使用表变量和游标) SQL,Server,遍历,表中,记录,