8.х Обход результата запроса в Т-SQL

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем Ludmillka, 29 дек 2014.

  1. TopicStarter Overlay
    Ludmillka
    Offline

    Ludmillka Опытный в 1С

    Регистрация:
    13 сен 2013
    Сообщения:
    159
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте, вопрос не совсем по теме 1С. Но может кто-то подскажет.
    У меня есть задача: в SQl Надо в Базе test выбрать определенные триггеры и выключить их. До меня все было написано вот так :

    ALTER TABLE [dbo].[109849] DISABLE TRIGGER [on109849Clr];
    ALTER TABLE [dbo].[109862] DISABLE TRIGGER [on109862Clr];
    ALTER TABLE [dbo].[11] DISABLE TRIGGER [on11Clr];
    ALTER TABLE [dbo].[11237199] DISABLE TRIGGER [on11237199Clr];
    ALTER TABLE [dbo].[11237202] DISABLE TRIGGER [on11237202Clr];
    ALTER TABLE [dbo].[11237208] DISABLE TRIGGER [on11237208Clr];
    ALTER TABLE [dbo].[11237209] DISABLE TRIGGER [on11237209Clr];
    ALTER TABLE [dbo].[11238338] DISABLE TRIGGER [on11238338Clr];
    ALTER TABLE [dbo].[11238850] DISABLE TRIGGER [on11238850Clr];
    ALTER TABLE [dbo].[11238851] DISABLE TRIGGER [on11238851Clr];
    ALTER TABLE [dbo].[11296651] DISABLE TRIGGER [on11296651Clr];
    ALTER TABLE [dbo].[11790534] DISABLE TRIGGER [on11790534Clr];
    ALTER TABLE [dbo].[11863773] DISABLE TRIGGER [on11863773Clr];
    ALTER TABLE [dbo].[11895645] DISABLE TRIGGER [on11895645Clr];

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

    Мне надо это дело автоматизировать:
    Я могу запросом выбрать данные номеров таблиц

    Код:
    USE [test]
    GO
    
    
    SELECT
             [Id]
            ,[System]
      FROM [dbo].[sphTask]
      WHERE [System] = 1;
    GO
    Получаю табличку с id
    [109849]
    [109862]
    [11]
    [11237199]
    ***
    [11895645]

    Потом по идее мне надо выполнить для каждой строчки следующий код (за синтаксис не отвечаю, т.к. в t-sql особо не шарю)

    ALTER TABLE [dbo].Id DISABLE TRIGGER ["on"+Id+"Clr"];

    Подскажите,как это сделать???
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    Необходимо использовать курсор.
    Курсор - это что-то типа выборки в T-SQL.
    Ludmillka нравится это.
  3. TopicStarter Overlay
    Ludmillka
    Offline

    Ludmillka Опытный в 1С

    Регистрация:
    13 сен 2013
    Сообщения:
    159
    Симпатии:
    0
    Баллы:
    26
    Спасибо, буду искать в сторону курсора.
  4. TopicStarter Overlay
    Ludmillka
    Offline

    Ludmillka Опытный в 1С

    Регистрация:
    13 сен 2013
    Сообщения:
    159
    Симпатии:
    0
    Баллы:
    26
    Может кому-то пригодиться, сделала так:
    Код:
    USE [test]
    
    -- обьявляем курсор
    declare some_cursor cursor
    --- sql запрос любой сложности, формирующий набор данных для курсора
    for
      select [Id], [System] from [dbo].[sphTask] WHERE [System] = 1;
    -- открываем курсор
    open some_cursor
    -- курсор создан, обьявляем переменные и обходим набор строк в цикле
    declare  @counter int
    declare  @int_var int, @string_var varchar(100)
    set @counter = 0
    -- выборка первой  строки
    fetch next from some_cursor INTO  @int_var, @string_var
    -- цикл с логикой и выборкой всех последующих строк после первой
    while @@FETCH_STATUS = 0
    begin
    --- логика внутри цикла
    set @counter = @counter + 1
    if @counter >= 5 break  -- возможный код для проверки работы, прерываем после пятой итерации
    print @int_var
    -- выборка следующей строки
    fetch next from some_cursor INTO  @int_var, @string_var
    -- завершение логики внутри цикла
    end
    select @counter as final_count
    -- закрываем курсор
    close some_cursor
    deallocate some_cursor
    
    
    
    
    
    где вместо print @int_var пишем нужную нам процедуру

Поделиться этой страницей