sql-server – 存储过程OUT参数始终返回NULL

前端之家收集整理的这篇文章主要介绍了sql-server – 存储过程OUT参数始终返回NULL前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的存储过程返回预期值,但OUT参数不返回任何内容.在程序退出之前打印out参数的值,参数的值设置并且看起来很棒.那么为什么我的测试代码没有得到任何价值呢?
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

解决方法

调用它时,需要将其标记输出参数
EXEC    @return_value = [dbo].[GetNewFileNumber] @out_value OUTPUT

猜你在找的MsSQL相关文章