2012-01-11 143 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