比如说表A的有两列 col1,col2
在表col_name里有2条记录
col1 代码
col2 名称要在查询的时候
select 
col1 as 代码,
col2 as 名称
from A
当有n个字段coln的时候
col_name也有n条记录
————————————
select 
col1 as 代码,
col2 as 名称,
...
coln as 其他
from A——————————————
col1 as 代码,
col2 as 名称,
...
coln as 其他
这段我想写成一个语句,其实就是想用一个查询结果来替代列名col1,col2是表A里的列名col1 代码
col2 名称
是表col_name的记录

解决方案 »

  1.   

    就是类似于
    SELECT 
    (
      SELECT NAME FROM SYSCOLUMNS
      WHERE id=(SELECT id FROM SYSOBJECTS WHERE NAME='A')
    )
    AS (select * query_col_name(A,
    (SELECT NAME FROM SYSCOLUMNS
      WHERE id=(SELECT id FROM SYSOBJECTS WHERE NAME='A'))
    )) FROM A
    这里的函数query_col_name是我定义出来查找对应表中,对应的列名的中文名称
    但是我的写法不对,字符串不知道怎么来表示列名,系统表里返回的也是个字符串形式
    就算用COL_NAME函数返回的也是个字符串名
    用[]里面直接加SQL语句也不对
      

  2.   

    create table tb(col1 varchar(10),col2 varchar(10))
    insert into tb values('col1', '代码') 
    insert into tb values('col2', '名称') 
    insert into tb values('coln', '其他') 
    godeclare @col1 varchar(10),@col2 varchar(10);
    declare @sql varchar(8000)
    set @sql = 'select '
    declare cur cursor fast_forward for
      select col1,col2 from tb;
    open cur;
    fetch next from cur into @col1,@col2;
    while @@fetch_status=0
    begin
       set @sql = @sql + '''' + @col1 + ''' as ' + @col2 + ' , '
       fetch next from cur into @col1,@col2;
    end
    set @sql = substring(@sql,1,len(@sql)-2)
    exec(@sql)
    close cur;
    deallocate cur;drop table tb/*
    代码   名称   其他   
    ---- ---- ---- 
    col1 col2 coln
    */
      

  3.   

    呃那个是没办法的事情我想要的那个
    我想让SQL语句自动读取出我要的列名
    然后用这些列名,作为查询语句的一部分,又生成新的查询