我有以下SP
CREATE PROCEDURE [dbo].[GetBaseSixtyTwoString]
@a_number_to_convert int,
@v_temp_val nvarchar(256) output
AS
DECLARE @v_modulo INTEGER;
DECLARE @v_temp_int decimal(38) = @a_number_to_convert;
DECLARE @v_temp_char VARCHAR(1);
DECLARE @c_base62_digits VARCHAR(62) = '0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ';
IF ( @a_number_to_convert = 0 )
BEGIN
SET @v_temp_val = '5';
END
WHILE ( @v_temp_int <> 0 )
BEGIN
SET @v_modulo = @v_temp_int % 62;
SET @v_temp_char = substring( @c_base62_digits, @v_modulo + 1, 1 );
SET @v_temp_val = @v_temp_char + @v_temp_val;
SET @v_temp_int = floor(@v_temp_int / 62);
END
我这样称呼它:
declare @shorturl nvarchar(256)
exec dbo.GetBaseSixtyTwoString 1, @shorturl output
但变量 @shorturl 始终返回null
但是如果我在SP中放置print语句,我可以看到 @v_temp_val 确实得到了正确的值。
我错过了什么?
答案 0 :(得分:4)
您需要将存储过程中的@v_temp_val
初始化为非NULL值,并''
。
如果@v_temp_val
为NULL
,那么这一行仍然会产生NULL
:
SET @v_temp_val = @v_temp_char + @v_temp_val;
因为&#34;价值&#34; + NULL = NULL
答案 1 :(得分:3)
检查放入变量@v_temp_val的值是否为null。请注意,任何非空值+ NULL都将导致NULL:
SET @v_temp_val = ISNULL(@v_temp_char, '') + ISNULL(@v_temp_val, '');