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] 삭제
몇 마디 만하겠습니다