sql数据表循环

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/y1535623813/article/details/88076027

问题描述,在SQL数据库中有很多数据,其中的一列,需要根据其它几列的值进行更新,比如,如果其值比某列小,用其他几列的最大值再加1。要对现有数据库中的所有数据都进行更新。

考虑用循环进行处理。从网上找到的参考方法如下。其思路是,将原来的表中的几个关键列读出来存入表变量中,作为循环更新时的索引。

循环时,从表变量中逐行读出列号信息,根据其列号去处理原表中的信息,处理完成,从表变量中删除该行。

按这种思路很方便的解决了我的问题。

使用表变量

  下面这种方法是使用表变量的方式实现的,代码如下。

-- 方法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+' '+@lastname WHERE empid=@empid;
    SET ROWCOUNT 0
    
    DELETE FROM @temp WHERE empid=@empid;
END

猜你喜欢

转载自blog.csdn.net/y1535623813/article/details/88076027