2013-08-29 15 views
5

Moja procedura składowana zwraca oczekiwaną wartość, ale parametr OUT nie zwraca niczego. Drukowanie wartości parametru out tuż przed zakończeniem procedury, wartość parametru jest ustawiona i wygląda świetnie. Dlaczego mój kod testowy nie odzyskuje żadnej wartości?Zapisana procedura OUT parametr zawsze zwraca 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 

Odpowiedz

17

trzeba oznaczyć go jako parametr wyjściowy, gdy nazywają go

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

Kocham Cię, mój Bohater. – Constablebrew

0

miałem ten sam problem. Okazało się, że jeden z moich wejściowych parametrów NVARCHAR miał wartość NULL. Po dodaniu do parametru wyjściowego NVARCHAR, ustawia on cały parametr na NULL. Dziwacznie. Sprawdź parametry wejściowe, jeśli dodasz je do parametru wyjściowego NVARCHAR. Spędziłem na tym sporo czasu!

Powiązane problemy