select * from (EXEC sp_SomeStoredProc)
これができない場合、SQL標準またはT-SQLに追加されないものは何ですか?T-SQLのストアドプロシージャの結果に対してselectを実行することはできますか
select * from (EXEC sp_SomeStoredProc)
これができない場合、SQL標準またはT-SQLに追加されないものは何ですか?T-SQLのストアドプロシージャの結果に対してselectを実行することはできますか
これはできませんが、挿入することはできます。例えば
insert mytable
exec myStoredProcedure
また、ストアドプロシージャsp_xxxxには名前を付けないでください。これは、SQLは常にユーザーストアドプロシージャを調べる前にsp_によってシステムストアドプロシージャ領域内を検索するため、頻繁に実行されるプロセスでかなり重要になる可能性のあるパフォーマンスの低下につながります。
ストアドプロシージャが行を返さない場合はどうなりますか?複数の結果セット?変更? ストアドプロシージャの潜在的な用途は多種多様です。
SELECT * FROM TableOrView
がある場合、直接バインディングがあり、構文と構造が簡単に確認できます。
より正確に言えば、リレーショナルの意味では、ストアドプロシージャはリレーション/テーブルではないため、そこから選択することはできません。
ユーザ定義関数は、あなたが望むものを実現しますが、コードがいくつかのリレーション/テーブルのコンセプトに従うことを可能にします。
これはできませんが、sqlserver2005の機能と考えることができます。ここでは、カンマ区切りリスト
Create Function [dbo].[CsvToInt] (@Array varchar(1000))
returns @IntTable table
(IntValue int)
AS
begin
declare @separator char(1)
set @separator = ','
declare @separator_position int
declare @array_value varchar(1000)
set @array = @array + ','
while patindex('%,%' , @array) <> 0
begin
select @separator_position = patindex('%,%' , @array)
select @array_value = left(@array, @separator_position - 1)
Insert @IntTable
Values (Cast(@array_value as int))
select @array = stuff(@array, 1, @separator_position, '')
end
return
end
と機能から選択し、単純なものからテーブルを作成する例機能は
...だSelect * FROM dbo.CsvToInt('1,2,3,5')
そして、あなたは、テーブルの値を取得します。
それは確かに行くための正しい方法ではない可能ですが、:
USE test
GO
CREATE procedure dbo.select1 AS
SELECT 1
GO
EXEC sp_addlinkedserver @server='OQtest', @datasrc='localhost', @provider='SQLNCLI', @srvproduct=''
GO
SELECT * FROM OPENQUERY(OQtest, 'test.dbo.select1')
また仕事に、このために、サーバ上のセキュリティ設定を調整する必要があるかもしれません。
ckで説明されている方法を使用できますが、これは実際には推奨されません。 詳細はHow to Share Data Between Stored ProceduresのINSERT-EXECセクションをErland Sommarskogで確認できます。
可能な複製:http://stackoverflow.com/questions/209383/select-columns-from-result-set-of-stored-procedure – Hannele