Хранимая процедура и функция, возвращающая неожиданные результаты - PullRequest
2 голосов
/ 12 января 2012

Использование вывода хранимой процедуры для параметра функции

DECLARE @SeqNo int; 
DECLARE @CharNumber varchar(10);
EXEC  dbo.sp_GetNextCounter 'ITEMTYPE', @SeqNo OUTPUT;
EXEC @CharNumber=dbo.rf_f_CIntToChar @SeqNo, 6;
SELECT @CharNumber;

Хранимая процедура sp_GetNextCounter имеет целочисленный вывод с именем SeqNo.

Хранимая процедура:

@param0 varchar(12),
@SeqNo INT OUTPUT
AS
BEGIN
IF (@param0 IS NOT NULL)
BEGIN
    set nocount on
    DECLARE @reqseqno INT
    SELECT @reqseqno = CounterValue FROM Counters WHERE CounterName = @param0
    UPDATE Counters SET CounterValue = @reqseqno + 1 WHERE CounterName = @param0
    SELECT @reqseqno AS 'SeqNo'
END
END
GO

Функция dbo.rf_f_CIntToChar принимает два параметра (целое число для преобразования, количество возвращаемых символов) возвращает varchar версию целого числа с ведущими нулями.

Функция:

(@intVal int, @intLen int)
RETURNS varchar(10)
WITH EXEC AS CALLER
AS
BEGIN
IF @intlen > 20 SET @intlen = 20
IF @intlen < LEN(@intVal) RETURN RIGHT(CONVERT(varchar(10), @intVal), @intlen)
RETURN REPLICATE('0', @intLen - LEN(@intVal)) + CONVERT(varchar(10), @intVal)
END
GO

И хранимая процедура, и функция работают, как и должны, если используются отдельно.

Почему приведенный выше запрос возвращает SeqNo, а не CharNumber?

1 Ответ

4 голосов
/ 12 января 2012

Ваша хранимая процедура никогда не присваивает значение выходному параметру @SeqNo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...