Isso funciona para gerar a string 123456
como:
1
2
3
4
5
6
Código:
declare @string varchar(20)
declare @index int
declare @len int
declare @char char(1)
set @string = '123456'
set @index = 1
set @len= LEN(@string)
WHILE @index<= @len
BEGIN
set @char = SUBSTRING(@string, @index, 1)
print @char
SET @index= @index+ 1
END
Mas quando tento usar este código para adicionar esses valores ao percorrê-los (1+2+3+4+5+6 = 21), não obtenho um resultado do SQL, por favor ajude
declare @string varchar(20)
declare @index int
declare @len int
declare @char char(1)
set @string = '123456'
set @index = 1
set @len= LEN(@string)
declare @Total int
WHILE @index<= @len
BEGIN
set @char = SUBSTRING(@string, @index, 1)
set @Total = @Total + cast(@char as int)
SET @index= @index+ 1
END
print @Total
Você precisa definir
@Total
um valor padrão, caso contrário, éNULL
eNULL
+ qualquer coisa sempre retornaNULL
.Alterar esta linha retorna
21
para mim:para
Dito isto, não é uma boa coisa tentar fazer em um grande número de linhas. Se você precisar fazer isso em valores escalares como está usando lá, considere usar um udf escalar para isso. No entanto, isso NÃO será bem dimensionado, portanto, se você usá-lo em uma mesa, esteja preparado para esperar um pouco.