Перебор строк SQL выборки — создание цикла в сценарии

Компонент "SQL запрос" возвращает только первую строчку из SQL выборки. Как сделать цикл и обработать каждую строчку?

Есть много способов решить данную задачу. Я предложу свои, на мой взгляд достаточно простые способы решения задачи.

Запрос в oktell "перебор списка всех внутренних номеров":

declare @var1 as int
SET @var1=@ish
use oktell_settings
SELECT top 1 @otvet=prefix
FROM [oktell_settings].[dbo].[A_NumberPlan]
WHERE [ID] NOT IN
(SELECT top (@var1) [id]
FROM [oktell_settings].[dbo].[A_NumberPlan] ORDER BY [ID]
) ORDER BY [id]

выполняет поставленную задачу (проверял на ms sql server 2008 полной и express версиях). На вход подается параметр @ish — нумерация строк начинается с 0, т.е. цикл начинайте с перебора 0-ой строчки. На выход отдается @var1 номер телефона.

Полезное примечание 1: если  (@var1) убрать скобочки, то запрос не будет работать. 

Полезное примечание 2: если @ish передавать сразу во вложенный запрос, не присваивая объявленной переменной @var1, то работать не будет. 

Если у вас ms sql server 2000, то такой запрос не будет выполнен. В 2000-ой версии можно создать хранимую процедуру и передавать в нее запрос на выполнение, либо обновить 2000-ую версию до 2008 (http://r.telsystems.ru/wiki/unconfirmed/251/).


Второй способ подсказал Дмитрий Шалавин )

Делаем SQL-запрос типа:
use oktell
declare @text varchar(5000)
set @text=''
select @text=@text+'<r>'+Prefix+'</r>'
FROM A_NumberPlan
select @text


Пример результата выполнения:
<r>admin2</r><r>Timur</r> <r>Богдана /r> <r>Natalia</r> <r>admin</r>

Результат можно в Oktell отработать в цикле при помощи элемента сценария Парсер. Теги можно перебирать при помощи команды eq(i) ... смотрите справку.


Красивое решение от Михаила Домброва:
select isnull(Prefix, Prefix) from A_NumberPlan for xml path('r')

результат такой:
<r>246</r><r>002</r><r>130</r><r>012</r><r>153</r><r>100</r><r>*</r><r>152</r><r>020</r><r>196</r><r>777</r><r>101</r><r>105</r><r>001</r><r>010</r><r>160</r><r>151</r><r>000</r><r>102</r><r>200</r>

    перебор строк, перебор выборки, sql, запрос

    Комментарии

    403

    ООО "Данио"


    25 декабря 201312:10

    Добрый день! В последнем варианте мне, очень плохо знающему T-SQL, совершенно не понятно, как использовать этот запрос. Или где-то опечатка запряталась?

    Виктор, Чебоксары

      404

      ООО "Данио"


      25 декабря 201314:15

      Нашёл ответ на свой вопрос, быть может, кому-то пригодится: нужно этот запрос в ещё один select завернуть, типа select @out = (select isnull(Prefix, Prefix) from A_NumberPlan for xml path('r')) и уже выходной @out использовать.

        Новое сообщение

        Прикрепить файлы

        Написать