日期:2014-05-17  浏览次数:20505 次

MS SQL中如果把字符串转成字段 , 求教
两张表的结构如下: 
A表:
     id     key_info
     1      kname
     2      kage 
B表:
     re_id  kname
     1      小王
     2      小李

求教, 如何把A表key_info字段里的kname值, 当做B表的查询字段名
错误示例: select * from B where (select key_info from A where id=1)='小王'
这样的结果实际等于 : select * from B where 'kname'='小王' 结果为空
子查询 ms?sql

------解决方案--------------------
[code=sql]


create table #ta(id int,key_info varchar(10))
insert into #ta
select 1,'kname'
union all select 2,'kage'

create table #tb(re_id int,kname varchar(10))
insert into #tb
select 1,'小王'
union all select 2,'小李'
go


declare @sql varchar(1000),@keyname varchar(100)
select @keyname=key_info from #ta where id=1
set @sql='select * from #tb where '+@keyname+'=''小王'''
exec (@sql)

/*
re_id    kname
----------------------
1 小王
*/

[code]
------解决方案--------------------
引用:
Quote: 引用:

第2种方法,生成动态语句:


create table A(id int,key_info varchar(100))

insert into a
values(1,'kname')

insert into a
values(2,'kage')

 
create table B(re_id  int,kname varchar(100))

insert into b
values(1,'小王')

insert into b
values(2,'小李')
go


declare @sql nvarchar(1000);

set @sql = 'select * from B where ' +
            (select key_info from A where id=1) + 
            ' = ' + quotename('小王','''')

--动态生成的语句
select @sql
/*
select * from B where kname = '小王'
*/

exec(@sql) 
/*
re_id kname
1     小王
*/

非常感谢 但是我想知道能不能用子查询的方式显示出同样的效果


这样呢,能符合你的要求不:
create table A(id int,key_info varchar(100))

insert into a
values(1,'kname')

insert into a
values(2,'kage')

 
create table B