2012-01-11 85 views
2

使用存储过程输出一个函数存储过程和函数返回意外的结果

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

+0

您可以添加源为SP和功能的简化版本? – 2012-01-11 20:45:20

+0

请发布重现问题的sp和函数的示例代码。 – 2012-01-11 20:45:52

回答

4

存储过程从未分配一个值来输出参数@SeqNo

+0

宾果。谢谢..我不知道我是如何错过的。 – emd 2012-01-11 20:58:36