Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 返回意外结果的存储过程和函数_Sql_Tsql - Fatal编程技术网

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

Sql 返回意外结果的存储过程和函数,sql,tsql,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 varcha

对函数的参数使用存储过程输出

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使用两个参数integer进行转换,返回的字符数返回带前导零的整数的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?

您的存储过程从未为输出参数@SeqNo赋值。

您的存储过程从未为输出参数@SeqNo赋值。

您可以为该SP和函数添加源代码的简化版本吗?请发布SP和函数的示例代码复制问题的函数。能否为该SP和函数添加源代码的简化版本?请发布复制问题的SP和函数的示例代码。宾果。谢谢我不知道我怎么会错过的,宾果。谢谢我不知道我怎么会错过。