2014-01-12 4 views
-2

@ss null 또는 "-"수를 반환 할 때까지 루프를 실행해야합니다. 그래서 코드 아래while 루프하는 방법

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 
고마워요, 수행하는 방법

을 ...

+0

왜 당신이 당신의 기능 대신이 스파게티 코드에서 테이블을 반환하지 않는 :아, 그리고 루프가 처음 가야, @ss는 더미 초기화를 제공? –

답변

0

사용 IS 대신 =<>IS NOT NULL과 비교 :

WHILE @ss IS NOT NULL 
DECLARE @i int, @ss varchar(20) = '' 
관련 문제