日期:2014-05-18  浏览次数:20491 次

具有挑战性的SQL 语句你会吗 ?
大虾们您们好,这个问题我不会。。特此求救。。
A(a1,a2,a3,abc)   (主键a1,abc)
B   (b1,b2,b3,abc)       (主键b1,abc)
C   (c1,c2,c3,a1)       (主键c1,外键a1)

要求把A中的a1,a2,B中的b1,b2,C表中的c2同时放到一个临时表#p中去
上述操作是在Button1按钮中实现的,即点击Button1触发该存储过程
问题的关键是   我还有个Button2     它的作用是点击后,临时表中的全部数据
反映到一个控件上   如:FpSpread控件,Gridview控件等
能够在控件上调出临时表中的数据吗 ?如果不能有什么好方法吗 

(用存储过程实现)
谢谢大虾们光临。再次感谢

------解决方案--------------------
select a.a1,a.a2,b.b2,b.b2,c.c2 into #p
from a inner join b on a.abc=b.abc inner join c on c.a1=a.a1

既然你还有其他动作需要用到#p中的数据,那么建议在Button1取得#p时,放到缓存中,然后Button2直接可到缓存中取相应的数据,这样效率也会有提高
------解决方案--------------------
点击Button1的时候触发该存储过程,为了避免麻烦,我把结果也返回了,所以用一个DataSet接返回值就好

比如:
SqlDataAdapter da = new SqlDataAdapter( "exec prco1 ",cnn)
DataSet ds = new DataSet
da.Fill(ds);

create proc prco1
as
select a1,a2,b1,b2,c2 into #tmpTable from A,B,C where a.abc = b.abc and a.a1 = c.a1
select * from tmpTable
GO


然后将ds保存到 ViewState中
ViewState[ "ds "] = ds;

点击Button2 的时候将ViewState中的ds绑定到GridView
------解决方案--------------------
/***晕晕晕***/
Create Proc Proc_Test
As
If object_id( 'temp..# ') is not null
drop table #
select a.a1,a.a2,b.b2,b.b2,c.c2 into #
from a inner join b on a.abc=b.abc inner join c on c.a1=a.a1
Go
/*点Button1,调用一次存储过程,再点Button2,将临时表#的数据返回到你的控件上去就可以了*/