存储过程和函数返回意外结果

时间:2012-01-11 20:42:59

标签: sql tsql

将存储过程输出用于函数的参数

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 个答案:

答案 0 :(得分:4)

您的存储过程从不为输出参数@SeqNo

指定值