Gespeicherte Prozedur parameter immer NULL zurückgeben
Meine gespeicherte Prozedur gibt den erwarteten Wert, aber der parameter ist nicht wieder alles. Drucken der Wert der out-parameter, kurz bevor die Prozedur beendet wird, ist der Wert des Parameters festgelegt und sieht toll aus. Warum also ist mein test-code nicht immer alle Wert zurück?
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
InformationsquelleAutor Constablebrew | 2013-08-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie markieren es als output-parameter beim Aufruf
Mein Gott, das ist so unglaublich unintuitiv! Ich verbringe gerade eine halbe Stunde Debuggen von meinem proc, um zu sehen, warum die Ausgabe war immer
null
wenn es sein soll 0.InformationsquelleAutor podiluska
Ich hatte das gleiche problem. Es stellte sich heraus, dass einer meiner input NVARCHAR-Parameter wurde NULL. Wenn Hinzugefügt, um die Ausgabe-parameter vom Datentyp NVARCHAR es die ganzen parameter auf NULL.
Bizarr.
Überprüfen Sie Ihre Eingabe-Parameter, wenn Sie Sie hinzufügen, um eine NVARCHAR-output-parameter.
Ich verbrachte eine ganze Weile auf dieser!
InformationsquelleAutor Resource