ビューでデータを返すストアドプロシージャを呼び出すにはどうすればよいですか?これも可能ですか?
この構造は、SQL Serverでは許可されていません。インラインテーブル値関数は、パラメータ化されたビューとして実行できますが、このようにSPを呼び出すことはまだ許可されていません。
SPとインラインTVFを交換可能に使用するいくつかの例を示します-インラインTVFは使用されると、より再利用可能になります。
CREATE TABLE dbo.so916784 (
num int
)
GO
INSERT INTO dbo.so916784 VALUES (0)
INSERT INTO dbo.so916784 VALUES (1)
INSERT INTO dbo.so916784 VALUES (2)
INSERT INTO dbo.so916784 VALUES (3)
INSERT INTO dbo.so916784 VALUES (4)
INSERT INTO dbo.so916784 VALUES (5)
INSERT INTO dbo.so916784 VALUES (6)
INSERT INTO dbo.so916784 VALUES (7)
INSERT INTO dbo.so916784 VALUES (8)
INSERT INTO dbo.so916784 VALUES (9)
GO
CREATE PROCEDURE dbo.usp_so916784 @mod AS int
AS
BEGIN
SELECT *
FROM dbo.so916784
WHERE num % @mod = 0
END
GO
CREATE FUNCTION dbo.tvf_so916784 (@mod AS int)
RETURNS TABLE
AS
RETURN
(
SELECT *
FROM dbo.so916784
WHERE num % @mod = 0
)
GO
EXEC dbo.usp_so916784 3
EXEC dbo.usp_so916784 4
SELECT * FROM dbo.tvf_so916784(3)
SELECT * FROM dbo.tvf_so916784(4)
DROP FUNCTION dbo.tvf_so916784
DROP PROCEDURE dbo.usp_so916784
DROP TABLE dbo.so916784
exec sp_addlinkedserver
@server = 'local',
@srvproduct = '',
@provider='SQLNCLI',
@datasrc = @@SERVERNAME
go
create view ViewTest
as
select * from openquery(local, 'sp_who')
go
select * from ViewTest
go
ビューでストアドプロシージャを呼び出すことができました(SQL Server 2005)。
CREATE FUNCTION [dbo].[dimMeasure]
RETURNS TABLE AS
(
SELECT * FROM OPENROWSET('SQLNCLI', 'Server=localhost; Trusted_Connection=yes;', 'exec ceaw.dbo.sp_dimMeasure2')
)
RETURN
GO
ストアドプロシージャ内で設定する必要があります。
set nocount on
SET FMTONLY OFF
CREATE VIEW [dbo].[dimMeasure]
AS
SELECT * FROM OPENROWSET('SQLNCLI', 'Server=localhost;Trusted_Connection=yes;', 'exec ceaw.dbo.sp_dimMeasure2')
GO
Sql Server 2005を使用している場合、テーブル値関数を使用できます。これらをテーブルと同様に扱いながら、これらを直接呼び出してパラメータを渡すことができます。
詳細については、 Table-Valued User-Defined Functions をご覧ください。
私が見つけた最も簡単な解決策は、SPから取得したデータからテーブルを作成することです。次に、そこからビューを作成します。
SPからデータを選択するときに、最後の手順でこれを挿入します。 SELECT * into table1 FROM #Temp
table1からselect *としてビューvw_view1を作成します
以下のようにビューをスクリプト化する必要があります。 基本的に、プロシージャの結果をテーブル変数または一時テーブルに書き込んでから、ビューに選択します。
編集-ストアドプロシージャをテーブル値関数に変更できる場合、一時テーブルを選択する手順がなくなります。
**編集2 **-提案したように、sprocをビューに読み込むことができないというコメントは正しいです。代わりに、他の投稿で説明されているように、procをテーブル値関数に変換し、そこから選択します。
create view sampleView
as select field1, field2, ...
from dbo.MyTableValueFunction
混乱をおaびします
create view sampleView as
select field1, field2, ...
from dbo.MyTableValueFunction
MyTableValueFunctionがパラメーターを受け入れない場合でも、その後に括弧を含める必要があることに注意してください。
... from dbo.MyTableValueFunction()
括弧がないと、「無効なオブジェクト名」エラーが表示されます。