sqlserver 遊標簡單示例

 

從一個表中查詢數據插入到另一個表的遊標示例:

Declare @Id varchar(20)
Declare @Name varchar(20)
Declare Cur Cursor For     //Cur遊標名稱
select fid,fname from  tbl_oper_info     //定义结果集的SELECT 语句
Open Cur
Fetch next From Cur Into @Id,@Name
While @@fetch_status=0
Begin
insert into temp(id,name)values(@id,@name)   //插入
Fetch Next From Cur Into @Id,@Name
End
Close Cur
Deallocate Cur

 

轉載一個sqlserver的遊標例子如下:

SQL Server游标例子
2007年12月24日 星期一 下午 11:22

 

有两张表,表1结构为"身份证号","姓名","编号", 表2结构为"姓名","身份证号","岗位工资","效益工资","工龄工资","房帖" 现在要生成一表,结构为"编号","姓名","非固定工资项目","金额".
例表1
------------------------
身份证号 姓名 编号
111111 张三 001.001
111112 李四 001.002
111113 王五 001.003

表二
-----------------------------
姓名 身份证号 岗位工资 效益工资 工龄工资 房帖
张三 111111 4300 2000 1000 500
李四 111112 3200 1800 800 450
王五 111113 3000 1600 700 400

求表结构为
-------------------------------------------------
编号 姓名 非固定工资项目 金额
001.001 张三 岗位工资 4300
001.001 张三 效益工资 2000
001.001 张三 工龄工资 1000
001.001 张三 房帖 800
001.002 李四 岗位工资 3200
001.002 李四 效益工资 1800
001.002 李四 工龄工资 800
001.002 李四 房帖 450
......
...
..
----------------------------------------

问题补充:用下面的语句生成测试数据
create table 表1 (身份证号 varchar(7),姓名 varchar(8),编号 varchar(7))
create table 表2 (姓名 varchar(8),身份证号 varchar(7),岗位工资 decimal(8,2),效益工资 decimal(8,2) ,工龄工资 decimal(8,2) ,房帖 decimal(8,2))

insert 表1 values ('111111', '张三', '001.001')
insert 表1 values ('111112', '李四', '001.002')
insert 表1 values ('111113', '王五', '001.003')

insert 表2 values('张三', '111111', 4300, 2000, 1000 , 500)
insert 表2 values ('李四', '111112' ,3200, 1800 , 800, 450 )
insert 表2 values ('王五', '111113' , 3000 , 1600 , 700 , 400)

还有一个特别重要的事情就是表2的工资项目有可能以后会添加,比如会添加高温补贴等.

-------------------------------------------------------------------------------------

declare @name varchar(10)
declare @sql varchar(8000)
declare @i int,@count int
select @i=1,@sql=' '
select @count=COUNT(*) from syscolumns where id=object_id('表2') and name <>'姓名' and name <>'身份证号'
declare www cursor for
        select name from syscolumns where id=object_id('表2') and name <>'姓名' and name <>'身份证号'
open www
     fetch www into @name
while (@@fetch_status=0)
      begin
        SELECT @sql= @sql + ' select 表1.编号,表1.姓名,''' + @name + ''' 非固定工资项目,'   + @name +
      ' 金额 from 表1 inner join 表2 on 表1.身份证号=表2.身份证号'
       -- SELECT @sql
         IF @I <> @count --select COUNT(*) from syscolumns where id=object_id('表') and name <>'姓名'
            BEGIN
               SELECT @sql= @sql + ' UNION '
            END
          SELECT @I=@I+1
        fetch www into @name
      end
close www
deallocate www
select @sql
exec   (@sql)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值