2014-01-12 6 views
-2

Мне нужно выполнить цикл, пока @ss не вернет null или число «-». так пробовал ниже кодКак сделать while loop in sql

DECLARE @i int,@ss varchar(20) 
SET @i=1; 
--WHILE (@ss =null) 
WHILE(@i<=3)// i need to assign i value dynamically 
BEGIN 
SET @ss =(SELECT dbo.GetStringPart('-','hello-world',@i)) 
PRINT @ss 
SET @i [email protected]+1 
END 

Функция: GetStringPart

ALTER FUNCTION [dbo].[GetStringPart] (@sep varchar(1), @s varchar(512),@pos int) 
RETURNS VARCHAR(200) 
AS 
BEGIN 
DECLARE @output VARCHAR(200) 
;WITH Pieces(pn, start, stop) AS (
    SELECT 1, 1, CHARINDEX(@sep, @s) 
    UNION ALL 
    SELECT pn + 1, stop + 1, CHARINDEX(@sep, @s, stop + 1) 
    FROM Pieces 
    WHERE stop > 0 
) 
SELECT 
    @output=SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) 
FROM Pieces 
WHERE [email protected] 
RETURN @Output 
END 

как сделать it.thanks ...

+0

почему вы не возвращает таблицу из вашей функции вместо этого запутанного кода? –

ответ

0

Использование IS и IS NOT вместо = и <> для сравнения с NULL:

WHILE @ss IS NOT NULL 

О, и получить цикл происходит в первый раз, дать @ss фиктивный инициализатору:

DECLARE @i int, @ss varchar(20) = ''