2013-01-24 7 views
31
SELECT col1, 
     col2, 
     col3, 

EXEC GetAIntFromStoredProc(T.col1) AS col4 
    FROM Tbl AS T 
    WHERE (col2 = @parm) 

このSQLクエリをSQL Server 2008に書き込む方法はありますか。選択クエリ内のストアドプロシージャを実行する方法

+5

関数を見ると、選択クエリ内からストアドプロシージャを呼び出すことはできません。 – twoleggedhorse

+1

EXC GetAIntFromStoredProc(t.col1)をcol4として選択 FROM tblとして ここで(col2 = @parm)はEXEC MyStoredProc 'param1'、 'param2'からcol1、col2を選択しません。これは重複した試し編集ではありませんが、拒否されました。このポストの回答は正しいです – DooMMcQ

答えて

31

感謝を@twoleggedhorse。

ここに解決策があります。

  1. まず、私たちはその後、私たちは選択クエリ

    Select col1, col2, col3, 
    GetAIntFromStoredProc(T.col1) As col4 
    From Tbl as T 
    Where [email protected] 
    
+36

しかし、これはもうプロシージャに格納されていません... – levi

+10

正確に。正解は「不可能」であったはずです。 – Tundey

+0

これは手続きに関して提起された文字通りの質問に対する答えではありません。これは、巨大な制限を持つ代替ソリューションです。私の実際の答えを見てください。 – BuvinJ

4

ストアドプロシージャでINSERTステートメントまたはUPDATEステートメントを実行していない限り、おそらくそれを関数にしたいと思うでしょう。

ストアドプロシージャは、外部プログラムまたは時間間隔で実行するためのものです。

ここでの答えは、それがより良い私ができるよりも説明します:

Function vs. Stored Procedure in SQL Server

+0

ストアドプロシージャは「外部プログラムで実行するために、または時間間隔で実行する」ために使用できますが、その目的のためにのみ意図されています。スクリプトは、データ操作のためのオンデマンドコンテキストで独立して実行されるように常に書き込まれています。 – BuvinJ

10

機能が選択ループ内で呼び出すのは簡単ですけど、彼らはドン

CREATE FUNCTION GetAIntFromStoredProc(@parm Nvarchar(50)) RETURNS INTEGER 

AS 
BEGIN 
    DECLARE @id INTEGER 

    set @id= (select TOP(1) id From tbl where [email protected]) 

    RETURN @id 
END 
  • 機能を作成しました挿入、更新、削除などを実行できます。これらは、クエリ操作にのみ役立ちます。データを操作するには、ストアドプロシージャが必要です。

    この質問に対する真の答えは、「カーソル」を介してselect文の結果を繰り返し、そのループ内からプロシージャを呼び出す必要があるということです。ここでは例です:@@FETCH_STATUSがあなたのために更新され、標準的な変数であることを

    DECLARE @myId int; 
    DECLARE @myName nvarchar(60); 
    DECLARE myCursor CURSOR FORWARD_ONLY FOR 
        SELECT Id, Name FROM SomeTable; 
    OPEN myCursor; 
    FETCH NEXT FROM myCursor INTO @myId, @myName; 
    WHILE @@FETCH_STATUS = 0 BEGIN 
        EXECUTE dbo.myCustomProcedure @myId, @myName; 
        FETCH NEXT FROM myCursor INTO @myId, @myName; 
    END; 
    CLOSE myCursor; 
    DEALLOCATE myCursor; 
    

    注意。残りのオブジェクト名はカスタムです。

  • 関連する問題