2016-11-14 337 views
2

我有這樣的場景。我需要在SELECT語句中執行存儲過程,其中調用存儲過程的輸入參數取自SELECT語句中使用的表。另外,下面有多個函數調用,它們使用SELECT子句中使用的表格輸入,但由於某些原因它不起作用。這是我正在嘗試實現的代碼示例,如下所示。如何在SQL Server的SELECT子句中執行存儲過程

代碼示例: -

SELECT A, 
     B, 
     dbo.storedproc(function1(A,B), 
         function1(A,B), 
         function2(B,C), 
         D 
        ) AS newcol,    
     D 
FROM Table; 

錯誤: -

消息4121,級別16,狀態1,過程XYZ,34號線


無法找到其中任何一列 「SCHEMANAME」 或用戶定義的函數或集合「schemaname.dbo.storedproc」,或名稱不明確。

注意: - 我使用基於集合的方法爲輸入表中的所有行調用此存儲過程。

+0

不,你不能做到這一點。它應該是一個標量函數或動態sql。 –

+0

我有一個非常長的CTE鏈,我在其中一個CTE中嘗試實現此功能.... – Teja

回答

4

你不能執行在你正在尋找select..What存儲過程是類似下面

--scalar valued function 
    create function dbo.test(int a) 
    returns int 
    as 
    begin 
    return someval of int 
    end 

現在你可以在上面選擇調用諸如標量值的功能/表值函數如下

select a,b,dbo.test(a) from t 

,如果你的存儲過程返回多發的值,你可以創建表值函數,並且可以使用交叉/外適用

---表值函數例如

CREATE FUNCTION dbo.ivf 
    (@a int, 
     @b int) 
RETURNS table 
AS 
RETURN (
     SELECT a,b from table 
     ) 

現在你可以調用這個像下面

select a,b from table t1 
cross apply 
(select * from dbo.ivf(a,b))c 
相關問題