`
verge
  • 浏览: 12911 次
  • 性别: Icon_minigender_2
最近访客 更多访客>>
社区版块
存档分类
最新评论

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,还有就是解决如何在语句中嵌入变量这个问题。 开始慢慢地体会到自己知识的浅薄了。
  • 描述: 运行效果图
  • 大小: 14.1 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics