不写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,还有就是解决如何在语句中嵌入变量这个问题。 开始慢慢地体会到自己知识的浅薄了。