2013-08-29 10 views
5

ストアドプロシージャは期待値を返しますが、OUTパラメータは何も返しません。プロシージャが終了する直前にoutパラメータの値を出力すると、パラメータの値が設定され、大きく見えます。では、なぜ私のテストコードは何の価値もないのですか?ストアドプロシージャOUTパラメータは常にNULLを返します

USE MyDB 
GO 
EXECUTE sp_addmessage 
    @msgnum = 51001, 
    @severity = 16, 
    @msgtext = N'Resource NOT Available', 
    @lang  = 'us_english', 
    @replace = REPLACE 
GO 

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetNewFileNumber]') AND type in (N'P', N'PC')) 
DROP PROCEDURE [dbo].[GetNewFileNumber] 
GO 


CREATE PROCEDURE dbo.GetNewFileNumber 
    (
     @NextFileNum nvarchar(11) = NULL output 
    ) 
AS 
BEGIN 

    set transaction isolation level serializable 
    begin transaction 

    declare @LockResult int; 
    declare @CurrentDate date; 
    declare @FileNumberDate date; 
    declare @FileNumber int; 

    execute @LockResult = sp_getapplock 
     @Resource = 'GetNewFileNumber_TRANSACTION', 
     @LockMode = 'Exclusive', 
     @LockTimeout = 0 
    if @LockResult <> 0 
    begin 
     rollback transaction 
     raiserror (51001, 16, 1) 
     return 
    end 


     set @CurrentDate = CONVERT (date, GETUTCDATE()); 

    select @FileNumberDate = filedate, 
     @FileNumber = fileCount from dbo._globalCounters; 
    if @FileNumberDate != @CurrentDate 
    begin 
     set @FileNumberDate = @CurrentDate; 
     set @FileNumber = 0; 
    end 

    set @FileNumber = @FileNumber + 1; 
    update dbo._globalCounters 
     set fileDate = @FileNumberDate, fileCount = @FileNumber; 

    set @NextFileNum = convert(nvarchar(6), @FileNumberDate, 12) + 
     '-' + 
     RIGHT('00'+convert(nvarchar(2), @FileNumber),2); 

    execute sp_releaseapplock 'GetNewFileNumber_TRANSACTION' 

    commit transaction 
    print 'filenum:' + @NextFileNum  
    return @FileNumber; 
END 

GO 

--Test the procedure 
DECLARE @return_value int 
DECLARE @out_value nvarchar(11) 
EXEC @return_value = [dbo].[GetNewFileNumber] @out_value 
SELECT 'Return Value' = @return_value, 'Out Value' = @out_value -- Out value always  returns null?! 
GO 

答えて

17

あなたは、私は同じ問題を抱えていた

EXEC @return_value = [dbo].[GetNewFileNumber] @out_value OUTPUT 
+4

私はあなたを愛しています、私のヒーロー。 – Constablebrew

0

それを呼び出すときに、出力パラメータとしてマークする必要があります。入力されたNVARCHARパラメータの1つがNULLであることが判明しました。出力パラメータNVARCHARに追加すると、パラメータ全体がNULLに設定されます。奇妙なことに、 入力パラメータをNVARCHAR出力パラメータに追加する場合は、入力パラメータを確認してください。 私はこれにかなりの時間を費やしました!

関連する問題