+ -
当前位置:首页 → 问答吧 → 遍历表中数据

遍历表中数据

时间:2011-11-08

来源:互联网

不用游标的话,用while怎么遍历表中每一列的数据

作者: Jimsx   发布时间: 2011-11-08

SQL code

declare @id int
select @id=min(id) from tb
while exists(select 1 from tb where id>@id)
begin
--此处对id为@id的行进行处理
set @id=@id+1
end

作者: qianjin036a   发布时间: 2011-11-08

引用楼主 jimsx 的回复:
不用游标的话,用while怎么遍历表中每一列的数据


啊!
每一列数据?
应该是每一行数据吧~~~~~~

作者: qianjin036a   发布时间: 2011-11-08

每一列直接查询不就OK了??

每一行的话可以用变量来做。

作者: fredrickhu   发布时间: 2011-11-08

每一列的数据都要遍历出来,因为要与另一个表中的数据比较

作者: Jimsx   发布时间: 2011-11-08

SQL code
select col1 from tb
union all
select col2 from tb
...

作者: ssp2009   发布时间: 2011-11-08

引用 4 楼 jimsx 的回复:
每一列的数据都要遍历出来,因为要与另一个表中的数据比较

哥们,还是每一列数据?
列名不知道?

作者: qianjin036a   发布时间: 2011-11-08

SQL code
--while,continue,break用法

declare @i int
set @i=1
while @i<20
begin
 set @i=@i+1
 if @i<=19
 continue
 print @i
end

declare @i int
set @i=1
while @i<20
begin
 if @i=19
 break
 print @i
 set @i=@i+1
end

作者: fredrickhu   发布时间: 2011-11-08

引用 4 楼 jimsx 的回复:
每一列的数据都要遍历出来,因为要与另一个表中的数据比较


结合系统表 动态拼接?

作者: fredrickhu   发布时间: 2011-11-08

比如说我有一个更变表,表中 有一个版本号字段(可能包含几个版本)
不同的版本号对应的数据可能有些列不同,所以要比较两张表(根据不同版本号)的数据是否一致
不一致的遍历出来

作者: Jimsx   发布时间: 2011-11-08

引用 5 楼 ssp2009 的回复:
SQL code
select col1 from tb
union all
select col2 from tb
...


或许就是这个?

作者: fredrickhu   发布时间: 2011-11-08

列名可以有,多少列也是固定的
引用 6 楼 qianjin036a 的回复:
引用 4 楼 jimsx 的回复:
每一列的数据都要遍历出来,因为要与另一个表中的数据比较

哥们,还是每一列数据?
列名不知道?

作者: Jimsx   发布时间: 2011-11-08

这个应该不行
因为我要比较先后不同的版本的数据是否一致
引用 10 楼 fredrickhu 的回复:
引用 5 楼 ssp2009 的回复:
SQL code
select col1 from tb
union all
select col2 from tb
...


或许就是这个?

作者: Jimsx   发布时间: 2011-11-08

引用 9 楼 jimsx 的回复:
比如说我有一个更变表,表中 有一个版本号字段(可能包含几个版本)
不同的版本号对应的数据可能有些列不同,所以要比较两张表(根据不同版本号)的数据是否一致
不一致的遍历出来


建议把你实际要做什么详细说出来,以便我们帮你,不然,既浪费大家的时间,也浪费你的宝贵时间.

作者: qianjin036a   发布时间: 2011-11-08

比如说我有一条数据
id,code,name,address,banben
1,'001','jim','asd',1
经过修改之后变成了
id,code,name,address,banben
1,'001','Tom','asd',2
现在要做的就是遍历这两条数据那个列修改了

作者: Jimsx   发布时间: 2011-11-08

补充一点,是根据版本号来比较
引用 14 楼 jimsx 的回复:
比如说我有一条数据
id,code,name,address,banben
1,'001','jim','asd',1
经过修改之后变成了
id,code,name,address,banben
1,'001','Tom','asd',2
现在要做的就是遍历这两条数据那个列修改了

作者: Jimsx   发布时间: 2011-11-08

引用 14 楼 jimsx 的回复:
比如说我有一条数据
id,code,name,address,banben
1,'001','jim','asd',1
经过修改之后变成了
id,code,name,address,banben
1,'001','Tom','asd',2
现在要做的就是遍历这两条数据那个列修改了


你这个修改是在之前那条记录里直接修改还是说在另一张表里有存放修改的记录。

作者: AcHerat   发布时间: 2011-11-08

引用 15 楼 jimsx 的回复:
补充一点,是根据版本号来比较

引用 14 楼 jimsx 的回复:
比如说我有一条数据
id,code,name,address,banben
1,'001','jim','asd',1
经过修改之后变成了
id,code,name,address,banben
1,'001','Tom','asd',2
现在要做的就是遍历这两条数据那个列修改了


可是你给的两条数据banben一个是1一个是2,本身就被修改了还怎么用版本号判断。

作者: AcHerat   发布时间: 2011-11-08

SQL code

--两个表的话你可以用case when来判断,原表是 tb 修改后的表记录在 ta

select a.id,a.code,
    (case when a.name = b.name then 0 else 1 end) [name],
    (case when a.address = b.address then 0 else 1 end) [address],
    (case when a.banben = b.banben then 0 else 1 end) [banben]
from tb a join ta b on a.id = b.id
-- 1 表示修改 0 表示未被修改

作者: AcHerat   发布时间: 2011-11-08

引用 15 楼 jimsx 的回复:
补充一点,是根据版本号来比较

引用 14 楼 jimsx 的回复:
比如说我有一条数据
id,code,name,address,banben
1,'001','jim','asd',1
经过修改之后变成了
id,code,name,address,banben
1,'001','Tom','asd',2
现在要做的就是遍历这两条数据那个列修改了


你的数据都已经修改了,如果没有原表数据,我怎么知道你改了呢?
如果版本号不为1就是改了,那直接
select * from tb where banben>1 
不就行了?

作者: qianjin036a   发布时间: 2011-11-08

原先的数据有记录,
新的数据有另一张表存放

作者: Jimsx   发布时间: 2011-11-08

引用 20 楼 jimsx 的回复:
原先的数据有记录,
新的数据有另一张表存放


参照18楼的方法,楼主可以按自己的要求去修改,差不多就是给特定的几列做个判断。

作者: AcHerat   发布时间: 2011-11-08

引用 20 楼 jimsx 的回复:
原先的数据有记录,
新的数据有另一张表存放

下面查询中,tb 是你用的表,tb1是保存原数据的表
SQL code
select a.*,b.banben as oldbanben
from tb a inner join tb1 b on a.id=b.id and a.banben<>b.banben

作者: qianjin036a   发布时间: 2011-11-08

SQL code
declare @n varchar(1000)=''
select @n=@n+char(13)+字段 fromprint @n

作者: q465897859   发布时间: 2011-11-08

Visual Studio 旗舰版、Visual Studio 高级专业版 都已经带有数据比较的功能了。看你如何使用了。

作者: zlp321002   发布时间: 2011-11-08

列不用遍历吧
select * from tb where id=@id
只是后面取数据时处理就行了。

作者: jinfengyiye   发布时间: 2011-11-08