2013-08-03 24 views
0

我有以下UDF:傳遞參數調用存儲過程後

create function fn_name 
    (@first varchar(50), 
    @middle varchar(50), 
    @last Varchar(50)) 
returns varchar(100) 
as 
begin 
    return 
     case 
     when @middle is null then @first+' '[email protected] 
     when Len(@middle)=0 then @first+' '[email protected] 
     else @first+' '[email protected]+' '[email protected] 
     end 
end 

我想創造上述功能的存儲過程,我一個傳入參數由一個經過這樣的方式,但在調用存儲過程。在SQL Server中可能嗎?如果是,如何?

+0

你是什麼意思「逐個傳遞參數」?你可以編輯這個問題,並提供你想要的電話看起來像什麼草圖? –

+0

就像上面的函數一樣,如果沒有中間名,它就不會執行。所以我想把它變成一個存儲過程,但想在我調用Proc後逐個傳遞這些參數。 – lahure

+0

您不能在過程中使用'RETURNS'來指定不同的數據類型。 'RETURN'僅用於整數值,它應該保留用於狀態/錯誤代碼。如果您想要返回單個值,請使用「OUTPUT」參數。 –

回答

0

您並不是真的想多次爲每個參數調用存儲過程。這是一場噩夢,因爲你必須在通話之間保存狀態。相反,使用可選參數:

create procedure usp_name (
    @first varchar(50) = '', 
    @middle varchar(50) = '', 
    @last varchar(50) = '', 
    @name varchar(100) output 
) 
as 
begin 
     select @name = (case when @middle is null then @first+' '[email protected] 
          when Len(@middle)=0 then @first+' '[email protected] 
          else @first+' '[email protected]+' '[email protected] 
         end); 
end; -- usp_name 

現在,所有三個參數都是可選的。如果你這樣調用它:

declare @name varchar(100); 
exec @name = @name output; 

然後它會返回''。如果您致電:

declare @name varchar(100); 
exec @first = 'Gordon', @last = 'Linoff', @name = @name output; 

然後您將獲得'Gordon Linoff'

並非所有參數都必須是可選的,如本例中所示。當您指定默認值時,它們將變爲可選。

+0

除'returns varchar()'不解析外,也不正文。 –

+0

@AaronBertrand。 。 。固定。 (另一個例子,順便說一句,我實際測試它,並複製錯誤的版本。) –

+0

你試過執行它嗎? 'Msg 245,Level 16,State 1,Procedure usp_name,Line 9 將varchar值'Gordon Linoff'轉換爲數據類型int.時,轉換失敗您仍然無法返回字符串。 –

相關問題