Ваш вопрос очень неясен ...
SQL-сервер - это основанный на множестве инструмент .Всякий раз, когда вы чувствуете необходимость зацикливать / повторять в наборе, вы, вероятно, подходите к своей проблеме с неправильной стороны.
Первый вопрос: как вы предоставляете свой список символов ?Это таблица, JSON, XML, CSV-строка?
В любом случае ваша цель должна состоять в том, чтобы получить его как set .
Просто чтобы показатьпринципы: если вы предоставляете свои символы, например, в виде простого списка, вы можете использовать рекурсивный CTE
DECLARE @L VARCHAR(100)='ACFHJTZJ'; --add as many as you need
WITH recCTE AS
(
SELECT 1 AS Pos,SUBSTRING(@L,1,1) AS OneChar
UNION ALL
SELECT r.Pos+1, SUBSTRING(@L,r.Pos+1,1)
FROM recCTE r
WHERE r.Pos<LEN(@L)
)
SELECT /*add DISTINCT if you want to surpress repeating characters*/
Pos,OneChar
FROM recCTE;
. Это вернет все буквы в качестве производной таблицы.
Вы можете использовать такой набор (однако вы создаете его) в выражении на основе набора, как здесь:
DECLARE @L VARCHAR(100)='ACFHJTZJ'; --add as many as you need
DECLARE @tbl TABLE(SomeColumn CHAR(1));
WITH recCTE AS
(
SELECT 1 AS Pos,SUBSTRING(@L,1,1) AS OneChar
UNION ALL
SELECT r.Pos+1, SUBSTRING(@L,r.Pos+1,1)
FROM recCTE r
WHERE r.Pos<LEN(@L)
)
INSERT INTO @tbl(SomeColumn)
SELECT DISTINCT OneChar
FROM recCTE;
SELECT * FROM @tbl;
Это будет вставлять каждый отдельный char
в таблицу @tbl
.Конечно, вы можете использовать это и в любом другом контексте (например, WHERE
условие).
В любом случае, это утверждение не должно измениться, содержит ли ваш список 1, 10 или тысячу элементов.
Если вам нужна дополнительная помощь, вам действительно следует предоставить дополнительную справочную информацию.Лучше всего было создать автономный сценарий, как я делал выше.И вы можете прочитать о проблеме XY ...