2009-04-08 6 views

答えて

9

これはできませんが、挿入することはできます。例えば

insert mytable 
exec myStoredProcedure 

また、ストアドプロシージャsp_xxxxには名前を付けないでください。これは、SQLは常にユーザーストアドプロシージャを調べる前にsp_によってシステムストアドプロシージャ領域内を検索するため、頻繁に実行されるプロセスでかなり重要になる可能性のあるパフォーマンスの低下につながります。

+0

うわー、これは機能しますか?あなたは私のSQLの人生を変えたかもしれません! – Dana

+0

"select into"でこれを行い、その後にテーブルをドロップできますか? –

+0

select intoでこれを行うことができるかどうか思い出せませんが、私はそうは思わないです。事前に完全なテーブル構造を作成する必要があります – cjk

1

ストアドプロシージャが行を返さない場合はどうなりますか?複数の結果セット?変更? ストアドプロシージャの潜在的な用途は多種多様です。

SELECT * FROM TableOrViewがある場合、直接バインディングがあり、構文と構造が簡単に確認できます。

より正確に言えば、リレーショナルの意味では、ストアドプロシージャはリレーション/テーブルではないため、そこから選択することはできません。

ユーザ定義関数は、あなたが望むものを実現しますが、コードがいくつかのリレーション/テーブルのコンセプトに従うことを可能にします。

1

これはできませんが、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') 

そして、あなたは、テーブルの値を取得します。

2

それは確かに行くための正しい方法ではない可能ですが、:

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') 

また仕事に、このために、サーバ上のセキュリティ設定を調整する必要があるかもしれません。

関連する問題