为什么SQL输出参数始终为null

时间:2015-11-25 05:14:26

标签: sql sql-server

我有以下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 确实得到了正确的值。

我错过了什么?

2 个答案:

答案 0 :(得分:4)

您需要将存储过程中的@v_temp_val初始化为非NULL值,并''

如果@v_temp_valNULL,那么这一行仍然会产生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, '');