请问:exec的结果可不可以直接作临时表和其他select语句join?

KnowLittle 2004-11-23 02:30:09
产生这个问题的原因:
表1有一个字段存储一个sql(select)语句,假设数据如下

col1 col2
abc select Username from T_user where title='经理'
def select Username from T_user where title='副经理'

假设
select Username from T_user where title='经理'出来结果是
张三
李四
select Username from T_user where title='副经理'出来结果是
王二
赵六

那么我需要得到这样一个记录集
newcol1 newcol2
abc 张三
abc 李四
def 王二
def 赵六

临时表的办法恐怕不行,因为表1的每一行的col2的sql语句都可能不一样

各位看看能不能有什么办法实现?分数可以再加!谢谢大家

...全文
280 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
KnowLittle 2004-11-23
  • 打赏
  • 举报
回复
谢谢大家提供的思路,我准备弄一个表,然后动态更新这个表的部分纪录
准备过一会儿开始写sp
search_you 2004-11-23
  • 打赏
  • 举报
回复
说明:
select col1,col2 from query
这一句中的"query"是指具有col1,col2这两个属性的那个表的表名。
search_you 2004-11-23
  • 打赏
  • 举报
回复
可以用游标实现。具体如下:


declare @msg varchar(8000),@sql nvarchar(200),@col1 varchar(100)
declare #tt# cursor for
select col1,col2 from query

open #tt#
fetch next from #tt# into @col1,@msg
while @@fetch_status=0
BEGIN
SET @sql='select @msg=('+@msg+')'
exec sp_executesql @sql,N'@msg varchar(8000) output',@msg output
select col1,@msg as result from query where col1=@col1
fetch next from #tt# into @col1,@msg
END
close #tt#
deallocate #tt#
funsuzhou 2004-11-23
  • 打赏
  • 举报
回复
存储过程包含1个游标,返回一个结果集。
依次取表1里的col2值,然后执行,得出结果,插入临时表,插入时多一个newcol1(left join 表1 on 表1.col2=游标取到的值),将最后的临时表返回就是你需要的。
KnowLittle 2004-11-23
  • 打赏
  • 举报
回复
那恐怕不行,因为这个记录集我需要频繁使用,而且要保证即时性,
那我只能考虑换一种思路了。。。
sigh
不过这个真的不好想阿,烦恼死了
zjcxc 元老 2004-11-23
  • 打赏
  • 举报
回复
临时表+游标,那是用存储过程写了,不是用视图写,视图写不了

每次需要这个记录集的时候都要重新生成
davorsuker39 2004-11-23
  • 打赏
  • 举报
回复
学习一下
KnowLittle 2004-11-23
  • 打赏
  • 举报
回复
邹建,不好意思我不太明白,临时表+游标,试图可以这么做吗?还是每次需要这个记录集的时候都要重新generate? 谢谢

风云,你可能还没理解我的意思,8过还是谢谢
pbsql 2004-11-23
  • 打赏
  • 举报
回复
思路:
col1 col2
abc select Username from T_user where title='经理'
def select Username from T_user where title='副经理'

1.将上面的记录变成:
col2
select 'abc',Username from T_user where title='经理'出来结果是
select 'def',Username from T_user where title='副经理'出来结果是

2.再把col2的所有值用union all连接起来:
select 'abc',Username from T_user where title='经理'出来结果是
union all
select 'def',Username from T_user where title='副经理'出来结果是

3.执行后就是你要的结果


不过建议你改结构,不好的表设计会导致编程上大量的烦琐代码,很累
zjcxc 元老 2004-11-23
  • 打赏
  • 举报
回复
不对,应该是临时表+游标,而且要求你的 select 结果出来的列数是相同的,否则无法处理.
zjcxc 元老 2004-11-23
  • 打赏
  • 举报
回复
临时表+游标逐行更新吧,估计这样的表设计是没有简便方法可想的.
KnowLittle 2004-11-23
  • 打赏
  • 举报
回复
这是表设计的问题。

col2为什么要存储SQL语句?这些语句有什么共同点?是不是统一的格式:select Username from T_user where ...?有没有可能几列?

没办法,是特殊的需求
这个可以保证sql语句出来结果只有1列,并且列名统一
KnowLittle 2004-11-23
  • 打赏
  • 举报
回复
谢谢楼上,这样恐怕不行的,我事先并不知道表1col2的数据,必须动态的拿出来sql然后执行
pbsql 2004-11-23
  • 打赏
  • 举报
回复
这是表设计的问题。

col2为什么要存储SQL语句?这些语句有什么共同点?是不是统一的格式:select Username from T_user where ...?有没有可能几列?
了缘 2004-11-23
  • 打赏
  • 举报
回复
select a.newcoll ,b.username from (select newcoll from table1 where newcoll='abc' ) a
,
(select Username from T_user where title='经理') b
union all
select a.newcoll ,b.username from (select newcoll from table1 where newcoll='def' ) a
,
(select Username from T_user where title='副经理') b

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧