难道真的无解吗--求select语句的简单写法 (100分)

  • 主题发起人 china_peng
  • 开始时间
C

china_peng

Unregistered / Unconfirmed
GUEST, unregistred user!
sql语法中表名、字段都为变量的,在[red]sql server[/red]中取@chr_03有没有比这更简便的写法,能否用一句话搞定!
DECLARE @chr_01 varchar(20),@chr_02 varchar(20) ,@chr_03 varchar(20),@sqlstr varchar(7000)
select @chr_01='mi01'
select @chr_02='maumi'
create table #tab(aaa varchar(20))
select @sqlstr='insert into #tab(aaa) select '+@chr_01+' from '+@chr_02+' where mi02=''1'' '
--[red]我的程序中只考虑 select mi01 from maumi where mi02='1' 返回一笔记录![/red]
print @sqlstr
exec(@sqlstr)
select @chr_03=aaa from #tab
print @chr_03
drop table #tab
 
最简单的写法就是什么都不写。
 
申明:不要不懂装懂!拒绝灌水!
 
看来你是想用临时表,是否可以考虑在内存中动态建表,这样速度快,
也不必考虑突然死机产生“表僵尸”
 
set @sqlstr='select '+@chr_03+'='+@chr_01+' from '+@chr_02+' where mi02=''1'' '
Exec(@SqlStr)
 
是你自找麻烦,后台SQL中有变量就是这样的,不过可以做适当简化
select @chr_01='mi01'
select @chr_02='maumi'
select @sqlstr='select '+@chr_01+' from '+@chr_02+' where mi02=''1'' '
exec(@sqlstr)

如果在客户端直接处理它,一句话不就搞定了
Query.Text:='select '+'mi01'+' from '+'maumi'+' where mi02=''1'' ';
Query.Active:=true;


 
DECLARE @chr_01 varchar(20),@chr_02 varchar(20) ,@chr_03 varchar(20),@sqlstr varchar(7000)
select @chr_01='mi01'
select @chr_02='maumi'
select @sqlstr='select @chr_03= '+@chr_01+' from '+@chr_02+' where mi02=''1'' '
print @sqlstr
exec(@sqlstr)
print @chr_03
drop table #tab
 
to maolu28,smallbs, shijunwu:
自己先测试一下!
[red]看看这句话能不能通过!
select @sqlstr='select @chr_03= '+@chr_01+' from '+@chr_02+' where mi02=''1'' '[/red]
[red]再次申明:不要不懂装懂!拒绝灌水![/red]
 
那是你动手能力不够,(''1'') 算啦,我不说了 [:D]
 
Line 5: Incorrect syntax near '@chr_03'.
老大!看看吧!
 
你的意思把所有字段加起来吗?你这样写也不对,如果不是也不用临时表,直接写就可以了
 
select @sqlstr='select @chr_03= '+@chr_01+' from '+@chr_02+' where mi02=''1'' '

这个怎么能通过呢

@chr_03 变量和引号不匹配啊,在你这句里 作为字段名了,当然出错

BTW : 偶什么都不会,胡乱说说
 
目前我们都是像楼主这么写的。。。
没找到更简洁的办法。。。。。。。。。。
 
不好意思,我不想灌水,只是写漏了一个‘+’号,
请看,希能帮到您:
set @sqlstr='select '+@chr_03+'='+@chr_01+' from '+@chr_02+' where mi02=''1'' '
Exec(@SqlStr)
 
楼上记住帖上来之前先测试,如果有这么简单,我也不会在这儿问了!
 
呵呵,高手啊!?
 
这个简单
 

呵呵 ,又一个倒霉蛋;
你最好看看mssql server 的帮助, 关于exec 的 你就知道像你这样肯定不行
不过你可以试试用存储过程
exec ( ) 是单独编译 的 你在exec() 外面定义的变量 在exec() 里面根本就找不到
你可以试用 一个cursor 试试 或用存储过程
我以前也遇到个, 后来用存储过程了事
 
顶部