SELECT col1,
col2,
col3,
EXEC GetAIntFromStoredProc(T.col1) AS col4
FROM Tbl AS T
WHERE (col2 = @parm)
如何在SQL Server 2008中編寫此SQL查詢?如何在選擇查詢中執行存儲過程
SELECT col1,
col2,
col3,
EXEC GetAIntFromStoredProc(T.col1) AS col4
FROM Tbl AS T
WHERE (col2 = @parm)
如何在SQL Server 2008中編寫此SQL查詢?如何在選擇查詢中執行存儲過程
感謝:
這裏的答案將解釋它比我好的人。
以下是解決方案。
首先,我們創建了一個功能
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 col1, col2, col3,
GetAIntFromStoredProc(T.col1) As col4
From Tbl as T
Where [email protected]
只要您沒有在存儲過程中執行任何INSERT或UPDATE語句,您可能需要將其作爲函數。
存儲過程用於由外部程序或定時間隔執行。 @twoleggedhorse
存儲過程可以用於「由外部程序執行或按照定時間隔」,但它們絕不限於那個,或者只是爲了那些目的。隨時編寫腳本以獨立運行,按需處理數據操作。 – BuvinJ
功能很容易的選擇循環中調用,但他們不」讓你運行插入,更新,刪除等等,它們只對查詢操作有用。您需要一個存儲過程來操作數據。
所以,這個問題的真正答案是,您必須通過「遊標」遍歷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
是獲取你更新的標準變量。這裏的對象名稱的其餘部分是自定義的。
您應該查看函數,您不能從選擇查詢中調用存儲過程。 – twoleggedhorse
select col1,col2,col3,EXEC GetAIntFromStoredProc(t.col1)as col4 FROM tbl as t where(col2 = @parm)IS NOT select col1,col2 FROM EXEC MyStoredProc'param1','param2'。這不是重複的,嘗試編輯但被拒絕,在這篇文章中的答案是正確的 – DooMMcQ