赞
踩
问题描述,在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
----------------------------------
参考地址:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。