2つのストアドプロシージャがあり、そのうちの1つは支払いリストを返し、もう1つは通貨でグループ化された支払いの概要を返します。今すぐ、私は重複したクエリを持っています:支払いの一覧を返すストアドプロシージャのメインクエリは、通貨で支払いの要約を返すストアドプロシージャのサブクエリです。私は、支払いの一覧を通貨で支払の概要を返すストアドプロシージャのサブクエリを返すストアドプロシージャを作成することによって、この二重性を排除したいと思います。それはSQL Server 2008で可能ですか?SQL Server 2008でサブクエリとしてストアドプロシージャを使用することはできますか?
答えて
最初のprocをTABLE-VALUED関数に変換したほうがよいです。複数のステートメントが関係する場合は、最初にリターンテーブル構造を定義し、それを移入する必要があります。
サンプル:
CREATE proc getRecords @t char(1)
as
set nocouut on;
-- other statements --
-- final select
select * from master..spt_values where type = @t
GO
が - になり -
CREATE FUNCTION fn_getRecords(@t char(1))
returns @output table(
name sysname,
number int,
type char(1),
low int,
high int,
status int) as
begin
-- other statements --
-- final select
insert @output
select * from master..spt_values where type = @t
return
end;
をしかし、それはストレートの選択である(または単一の文として書くことができる)場合は、INLINEを使用することができます高度に最適化されたtvf形式
CREATE FUNCTION fn2_getRecords(@t char(1))
returns table as return
-- **NO** other statements; single statement table --
select * from master..spt_values where type = @t
2番目のprocは、最初のprocから単に選択します
create proc getRecordsByStatus @t char(1)
as
select status, COUNT(*) CountRows from dbo.fn2_getRecords(@t)
group by status
そして、あなたは結果を得るために
EXEC firstProc @param
を呼び出すために使用される場合は、あなたは今、それをパラメータ化する必要がない限り、私は、ビューを使用することになり、それから
SELECT * FROM firstProc(@param)
ストアドプロシージャの出力をテンポラリテーブルにキャプチャし、メインクエリでテーブルを使用することができます。
列IDおよびNameを表変数に戻すストアド・プロシージャの出力を取得します。あなたは、テーブル値関数にリストを返す手続きを行った場合
declare @T table (ID int, Name nvarchar(50))
insert into @T
exec StoredProcedure
、その後、私はあなたがサブクエリでそれを使用することができます信じています。
ストアドプロシージャの結果をテーブル変数または一時テーブルに挿入すると、そのトリックが実行されます。
SQL Serverのコードをあるクエリから次のクエリに再利用しようとすると、テーブル機能の柔軟性が向上します。パラメータを渡す必要がない場合や、あらゆる種類のフロー制御ロジックを使用する必要がない場合は、ビューは問題ありません。これらは、他の関数、プロシージャ、ビュー、またはt-SQL文のテーブルと同様に使用できます。
私はジェフに同意します。テーブル値関数は、このようなことに最適です。 – brian
を選択し、テーブル値の関数を使用できるマルチステートメント操作でなければならない限り、可能な場合はインラインのテーブル値関数を使用しますが、通常は効率が悪いです。
- 1. SQL Server 2008で列ヘッダーを使用することはできますか?
- 2. SQL Server 2008 R2 Expressでレポートビルダを使用することはできますか?
- 3. SQL ServerデータツールはSQL Server 2008 SSISと連携できますか?
- 4. SQL Server 2008でストアドプロシージャをデバッグ
- 5. SQL Server 2008:サブクエリはこのコンテキストでは使用できません。スカラー式のみが許可されます
- 6. 我々ははい、それが作成して使用することができますどのように場合、SQL Server ... に新しいイム...私たちは、MSのSQL Server 2008でパッケージを使用することができ、MS SQL Server 2008の
- 7. SQL Server 2008でストアドプロシージャを使用してUnicodeテキストを保存する方法
- 8. SQL Server 2008とストアドプロシージャの学習
- 9. SQL Server 2008のデータベーステーブルにイメージを追加することはできますか?
- 10. SQL Server 2005でSQL Server 2008管理スタジオを使用できますか?
- 11. SQL Server 2008:サニティチェックとは何ですか?
- 12. SQL Server 2008でストアドプロシージャとテーブルの総数を数える方法
- 13. VBAとSQL Server 2012を使用してRollbackTransでストアドプロシージャを実行
- 14. SQL Serverのサブクエリを使用してテキスト検索を解放できますか?
- 15. SQL Server 2008でCASEを使用する
- 16. SQL Serverでinsertストアドプロシージャを使用する
- 17. SQL ServerでRegExpを使用するストアドプロシージャ
- 18. SQL Server 2008とSQL Server 2012を削除できません
- 19. Excel 2010を使用してストアドプロシージャを使用してSQL Server 2008データベースに読み書きする
- 20. C#とSQL Server 2008:まずコードを使用する方法は?
- 21. オープンソースプロジェクトでSQL Server Compact Editionを使用することはできますか?
- 22. SQL ServerでROW_NUMBER()でエイリアスを使用することはできませんか?
- 23. SQL Server 2008で一致するパターンを使用してグループ化することは可能です
- 24. C#とAsp.netでSQL Server 2008のビューを使用する
- 25. SQL Server Management Studio 2008はどこにダウンロードできますか?
- 26. マージモジュールとInstallShieldを使用してSQL Server 2008をインストールしますか?
- 27. MS SQL Server 2008テーブル/ストアドプロシージャが使用されているかどうかをどのように知ることができますか?
- 28. SQL Management StudioからSQL Server 2008のストアドプロシージャをデバッグできません
- 29. SQL Server 2008からSQL Azureにストアドプロシージャを移行できません
- 30. パラメータとして「TOP」番号をストアドプロシージャに渡すことはできますか?
ストアドプロシージャがCUBEでOPENQUERYを実行する必要がある場合はどうなりますか?関数内ではそのことはできません。 –