thủ tục lưu trữ của tôi trả về giá trị dự kiến, nhưng tham số OUT không trả lại bất cứ điều gì. In giá trị của tham số ngoài ngay trước khi thoát khỏi thủ tục, giá trị của tham số được đặt và trông tuyệt vời. Vậy tại sao mã thử nghiệm của tôi không nhận được bất kỳ giá trị nào?Lưu trữ thủ tục OUT tham số luôn luôn trở về 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
Tôi yêu bạn, anh hùng của tôi. – Constablebrew