SELECT col1,
col2,
col3,
EXEC GetAIntFromStoredProc(T.col1) AS col4
FROM Tbl AS T
WHERE (col2 = @parm)
SQL Server 2008でこのSQLクエリを記述する方法は?
@twoleggedhorseに感謝します。
これが解決策です。
最初に関数を作成しました
CREATE FUNCTION GetAIntFromStoredProc(@parm Nvarchar(50)) RETURNS INTEGER
AS
BEGIN
DECLARE @id INTEGER
set @id= (select TOP(1) id From tbl where col=@parm)
RETURN @id
END
次に、選択クエリを実行します
Select col1, col2, col3,
GetAIntFromStoredProc(T.col1) As col4
From Tbl as T
Where col2=@parm
関数は選択ループ内で簡単に呼び出すことができますが、挿入、更新、削除などを実行することはできません。これらはクエリ操作にのみ役立ちます。データを操作するには、ストアドプロシージャが必要です。
したがって、この質問に対する本当の答えは、「カーソル」を介してselectステートメントの結果を反復処理し、そのループ内からプロシージャを呼び出す必要があるということです。次に例を示します。
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;
@@FETCH_STATUS
は更新される標準変数であることに注意してください。ここでの残りのオブジェクト名はカスタムです。
ストアドプロシージャでINSERTまたはUPDATEステートメントを実行していない限り、おそらくそれを関数にすることをお勧めします。
ストアドプロシージャは、外部プログラムによる実行、または一定の間隔での実行用です。
ここでの答えは、私ができる以上にそれを説明します:
Proc出力に一致する一時テーブルを作成して挿入できます。
CREATE TABLE #Temp (
Col1 INT
)
INSERT INTO #Temp
EXEC MyProc