2011-06-27 24 views
0

現在、異なるテーブルから要素を出力するために、ストアドプロシージャ内の結合を使用しています。私は定型コードの多くを維持する必要があるため、積極的な例複数の結果セットをT-SQLの結合と組み合わせた

select a.*, b.*, c.*, d.*, e.*, f.* from tableA a 
join tableB b on a.id = b.foreignid 
join tableC c on b.id = c.foreignid 
join tableD d on c.id = d.foreignid 
join tableE e on d.id = e.foreignid 
join tableF f on e.id = f.foreignid 
where a.id = 1 

それは、私のC#のコード内のエンティティへの出力をマッピングする場合で動作するようにかなり不便になっています。 代わりに、私は各結果セットをコード内のオブジェクト型にマップできるように、複数の結果セットを使用します。 しかし、異なる結果がすべて互いに関連する私のケースでは、これを達成するためにどうすればよいでしょうか?私が見つけた例は、私のような外部キーによってデータが関連していなかった別のテーブルから選択することを中心にしています。私は複数の結果で私の結果を出力リレーした場合もっとたくさんの文を参加がありますから、より多くのineffecient(私は仮定だろう、私が思い付くことができる唯一のことは、この

select a.* from tableA 
where a.id = 1 

select b.* from tableB 
join tableA a on a.id = b.foreignid 
where a.id = 1 

select c.* from tableC 
join tableB b on b.id = c.foreignid 
join tableA on a.id = b.foreginid 
where a.id = 1 

select d.* from tableD 
join tableC c on c.id = d.foreignid 
join tableB b on b.id = c.foreignid 
join tableA a on a.id = b.foreignid 
where a.id = 1 

select e.* from tableE 
join tableD d on d.id = e.foreignid 
join tableC c on c.id = d.foreignid 
join tableB b on b.id = c.foreignid 
join tableA a on a.id = b.foreignid 
where a.id = 1  

select f.* from tableF 
join tableE e on e.id = f.foreignid 
join tableD d on d.id = e.foreignid 
join tableC c on c.id = d.foreignid 
join tableB b on b.id = c.foreignid 
join tableA a on a.id = b.foreignid 
where a.id = 1  

のようなものである。しかし、これはきれいではありません) 私はしようとしているこの方法で複数の結果セットを使用することは可能ですか?私は、例のように結果セットごとに大規模な結合を行うことなく、ストアドプロシージャにSQL文を書く方法を知りません。そして

答えて

0

一緒に、私はそれらすべてに参加するので、私は列の爆発を取得し、現在のソリューションを使用すると、実際には単一のSPからmultiplte結果セットを返すことができますし、C#でそれらを消費し、例えばこの記事をチェックしてください。http://blogs.msdn.com/b/dditweb/archive/2008/05/06/linq-to-sql-and-multiple-result-sets-in-stored-procedures.aspx

にですあまり知られていない機能ですが、あなたが求めているようなものです。それらに参加して、それらを矛盾のない行セットとして戻す必要はありません。別々の行セットを取得し、それらをメモリにまとめてください。

また、必要に応じて機能に費やすたくさんの入力を省くことができるORMフレームワークをお読みください。 https://stackoverflow.com/questions/249550/what-orm-frameworks-for-net-do-you-like-best

よろしくGJ

+0

私は私のコードで複数の結果を消費する方法を知っていると私はできれば、私はORMを使用します。しかし、すべてのデータベースアクセスがストアドプロシージャを使用する必要があります。私は私のストアドプロシージャを使用するSQLにlinqを使用しますが、それは本当に私にORMの完全な力を与えるものではありません。私の質問は、実際にストアドプロシージャで複数の結果セットを返すことが実際に可能な場合です。 – Xorandor

+0

私は理解できません。複数の結果セットが必要ですか?参加する必要がある場合は、参加してください。または、結果セットから作成したオブジェクトを外部キーを使用したdbのように1対多の方法でリンクしたいのですか? – gjvdkamp

+0

あなたが達成したいと思うもののもう少しサンプルコードと、あなたが遭遇する問題がここで助けになります。 – gjvdkamp

関連する問題