存儲過程的output參數


在SSIS的Execute SQL Task組件中執行存儲過程,想要返回單行的結果,總是無法返回查詢的結果,返回的錯誤是無法把DBNull轉換為String類型:

The type of the value (DBNull) being assigned to variable "User::MailBody" differs from the current variable type (String). Variables may not change type during execution. Variable types are strict, except for variables of type Object

對於這個錯誤,暫不做深入的調查。存儲過程返回執行的結果,可以是通過返回值、基礎表來實現,當然也可以通過output參數來實現。

在創建存儲過程時,必須通過output關鍵字顯式聲明輸出型參數。對於輸出型參數,既可以接收值,也既可以不接收值,但是必須被賦值為變量,用於向外輸出結果。沒有用output關鍵字聲明的參數是輸入型參數,對於輸入型參數,只接收值,不向外輸出結果。

第一步:在存儲過程中定義output參數 @para,聲明輸出型參數的格式如下所示:

@para data_type output

舉個例子,創建一個存儲過程,定義參數@p2為輸出型參數,默認情況下,@p1是輸入型參數:

create proc sp_name 
    @p1 int,
    @p2 int output

第二步:在存儲過程中對output參數賦值,注意,在存儲過程返回前,必須對output參數賦值,否則存儲過程會拋出異常

set @p2=value

第三步:調用存儲過程,獲得output參數的值

聲明一個變量@var,通過變量來獲得output參數的值,注意:在調用存儲過程時,必須通過output關鍵字顯式聲明輸出參數。

declare @var data_type
exec sp_name @p1=1, @p2 = @var output

對於output參數,必須賦值為變量,變量可以初始化,也可以不初始化。

1,當變量被初始化時

如果變量已經初始化,那么輸出型參數接收了變量的值,和普通的輸入型參數的用法相同,可以在存儲過程中直接引用output參數的值。如下所示,可以在存儲過程sp_name中引用@p2的值:

declare @var data_type
set @var=2

exec sp_name @p1=1, @p2 = @var output

2,當變量未初始化時

如果變量未被初始化,那么在存儲過程中,不可以直接引用output參數的值,只有輸出參數@p2被賦值之后,才可以引用。

declare @var data_type

exec sp_name @p1=1, @p2 = @var output

 

 

參考文檔:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM