SQL练手(SQL Server 2000)
不写sql好久,都有些陌生了,刚好朋友问我一个问题,就顺便写了这些[*]取得表的结构属性
select * from information_schema.columns where table_name='authors';
[*]初级游标使用
要完成的一个小功能:将一个数据表的列变成行,将某一单行相应的列值放到其右边。具体效果为图片中所示。
说明:下面的存储过程在SQL Server 2000上成功运行,使用自带的pubs数据库authors表。
sql 代码
[*]create PROC sp_row_col @au_id varchar(50)
[*]as
[*] /* 声明游标 */
[*] declare colCursor CURSOR for
[*] select column_name from information_schema.columns where table_name='authors'; /* 取得列名 */
[*]
[*] declare @col varchar(50);
[*] declare @colValue varchar(100);
[*] declare @sqlStr varchar(200)
[*]
[*] open colCursor; /* 打开游标 */
[*] fetch next from colCursor into @col;
[*] while @@FETCH_STATUS=0 /* 系统变量@@FETCH_STATUS为0表示FETCH语句成功,-1:失败或此行不在结果集中,-2:被提取的行不存在. 注:不同的DBMS这里有所不同*/
[*] begin
[*] set @sqlStr = 'declare valCursor CURSOR for SELECT '+ @col + ' FROM authors where au_id='''+@au_id+''''; /* 用变量作select列名的解决办法,不知道还有没有更好一些的? */
[*] exec (@sqlStr);
[*]
[*] open valCursor;
[*] fetch next from valCursor into @colValue;
[*] close valCursor /* 关闭游标 */
[*] deallocate valCursor /* 释放游标 */
[*]
[*] insert into row_col values(@col, @colValue);
[*] fetch next from colCursor into @col;
[*] end
[*] close colCursor /* 关闭游标 */
[*] deallocate colCursor /* 释放游标 */
[*]return
[*]
[*]go
[*]use pubs;
[*]create table row_col (column_name varchar(50), col_value varchar(50));
[*]exec sp_row_col '172-32-1176'
[*]
[*]select * from row_col;
[*]select * from authors;
[*]
ps: 写这些google了N多次,主要是原来都还没有用过游标,汗ing,还有就是解决如何在语句中嵌入变量这个问题。 开始慢慢地体会到自己知识的浅薄了。
页:
[1]