SQL Server : WHILE 루프 내에서 수정 된 변수는 루프 외부에서 선택 될 때 변경되지 않은 것으로 나타납니다.

Rob Streeting

SQL Server에서 while 루프를 할당과 결합 할 때 이상한 동작이 나타납니다. 다음 SQL Server TSQL 코드가 있습니다.

DECLARE @string nvarchar(max) = 'Foo bar bat.';
WHILE PATINDEX('bar', @string) != 0
BEGIN
    SET @string = REPLACE(@string, 'bar', '')
END
SELECT @string

여기에 결과가 예상 Foo bat.되지만 Foo bar bat.원래 @string 변수가 변경되지 않은 것처럼 결과는 실제로 입니다. 그래도 무한 루프에 들어 가지 않습니다. 이는 @string의 값이 내가 원하는 방식으로 업데이트되었음을 ​​시사하지만 어떤 이유로 인해 while 루프를 벗어나면 잊어 버립니다.

이것이 발생하는 원인은 정확히 무엇이며 예상되는 결과를 어떻게 얻을 수 있습니까?

SQL Server 2016 SP2를 실행하고 있습니다.

조 하르 펠 레드

루프가 전혀 실행되지 않습니다.

PATINDEX('bar', @string)0을 반환합니다 bar. 앞뒤에 와일드 카드를 추가해야합니다 . 다음으로 변경PATINDEX('%bar%', @string)

DECLARE @string nvarchar(max) = 'Foo bar bat.';

WHILE PATINDEX('%bar%', @string) != 0
BEGIN
    SET @string = REPLACE(@string, 'bar', '')
END
SELECT @string

결과 :

Foo  bat.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관