SQL练手(SQL Server 2000)

不写sql好久,都有些陌生了,刚好朋友问我一个问题,就顺便写了这些

  • 取得表的结构属性
select * from information_schema.columns  where  table_name='authors';
  • 初级游标使用
要完成的一个小功能:将一个数据表的列变成行,将某一单行相应的列值放到其右边。具体效果为图片中所示。
说明:下面的存储过程在SQL Server 2000上成功运行,使用自带的pubs数据库authors表。
   
sql 代码
 
  1. create PROC sp_row_col @au_id varchar(50)  
  2. as        
  3.     /* 声明游标 */  
  4.     declare colCursor CURSOR for   
  5.     select column_name from information_schema.columns where table_name='authors'; /* 取得列名 */  
  6.       
  7.     declare @col varchar(50);  
  8.     declare @colValue varchar(100);  
  9.     declare @sqlStr varchar(200)  
  10.   
  11.     open colCursor;  /* 打开游标 */  
  12.     fetch next from colCursor into @col;  
  13.     while @@FETCH_STATUS=0  /* 系统变量@@FETCH_STATUS为0表示FETCH语句成功,-1:失败或此行不在结果集中,-2:被提取的行不存在. 注:不同的DBMS这里有所不同*/  
  14.     begin  
  15.         set @sqlStr = 'declare valCursor CURSOR for SELECT '+ @col + ' FROM authors where au_id='''+@au_id+''''; /* 用变量作select列名的解决办法,不知道还有没有更好一些的? */  
  16.         exec (@sqlStr);  
  17.           
  18.         open valCursor;  
  19.         fetch next from valCursor into @colValue;             
  20.         close valCursor /* 关闭游标 */  
  21.         deallocate valCursor /* 释放游标 */  
  22.           
  23.         insert into row_col values(@col, @colValue);  
  24.         fetch next from colCursor into @col;  
  25.     end  
  26.     close colCursor /* 关闭游标 */  
  27.     deallocate colCursor /* 释放游标 */   
  28. return  
  29.   
  30. go   
  31. use pubs;  
  32. create table row_col (column_name varchar(50), col_value varchar(50));  
  33. exec sp_row_col '172-32-1176' 
  34. select * from row_col;  
  35. select * from authors;
  36.  


ps: 写这些google了N多次,主要是原来都还没有用过游标,汗ing,还有就是解决如何在语句中嵌入变量这个问题。 开始慢慢地体会到自己知识的浅薄了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值