У меня проблема с While
L oop на SQL Сервере.
Я хочу разделить что-то вроде:
'@Name=John;@Surname=Kowalsky;@DATA=data;'
В таблицу с двумя столбцами, где один будет '@Name'
, а второй 'John'
После каждого разделения я написал обновление, чтобы удалить строку разделения и начать с новой, но это не работает.
CREATE TABLE test2 (x varchar(max), y varchar(max))
INSERT INTO test2 VALUES (1, '@Name=John;@Surname=Kowalsky;@DATA=data;')
CREATE TABLE test (x varchar(max), y varchar(max))
DECLARE @y varchar(max) = (SELECT y FROM test2)
WHILE (SELECT LEN(y) FROM test2) > 0
BEGIN
INSERT INTO test (x,y)
VALUES ((SUBSTRING(@y, CHARINDEX('@', @y)+1, CHARINDEX('=',@y) -CHARINDEX('@',@y)-1)),
(SUBSTRING(@y, CHARINDEX('=', @y)+1, CHARINDEX(';',@y) -CHARINDEX('=',@y)-1)))
UPDATE test2
SET y = REPLACE(y, SUBSTRING(y, 1, CHARINDEX(';', y)), '')
FROM test2
END
В ответ я получаю тест таблицы с 3 одинаковыми строками: ИМЯ / ДЖОН
Итак, этот l oop выполняет эту работу ПОЧТИ правильно ... Что я делаю неправильно