比如说表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的记录
在表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的记录
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语句也不对
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
*/
我想让SQL语句自动读取出我要的列名
然后用这些列名,作为查询语句的一部分,又生成新的查询