Обновить несколько таблиц, зацикливаясь на них с помощью курсора (sql server)

Я не знаю, отражает ли заголовок то, что я прошу, но у меня есть несколько таблиц, которые я хочу обновить, используя поле из таблицы, которую я назову «UPDATE_DATA_TABLE». Проблема в том, что я пытаюсь настроить задание sql для этого. Я могу обновить одну единственную таблицу, но не могу заставить задание перемещаться по всем таблицам, я попытался передать имя каждой таблицы в переменной, но ни выбор, ни обновление не разрешены, когда имя этой таблицы является переменной.

Вот что я сделал так:

BEGIN
  DECLARE @temp_data NVARCHAR(256)
  DECLARE @temp_camp NVARCHAR(256)
  DECLARE @temp_indice INT
  DECLARE @total INT
  DECLARE @id INT = 1
  DECLARE @iter INT = 0
  DECLARE @TempCustomer TABLE(
    INDICE_TEMP INT NOT NULL,
    INDICE INT NOT NULL,
    DATAMEMO NVARCHAR(20))
  DECLARE @tab NVARCHAR(256)


  INSERT INTO @TempCustomer SELECT ROW_NUMBER() OVER(ORDER BY INDICE ASC) AS Row,indice,DATAMEMO FROM TABLE_TO_UPDATE WHERE NIVABS >= 5
  SET @total = (SELECT count(*) FROM @TempCustomer)

  WHILE @iter < @total
   BEGIN
    SET @temp_indice =(SELECT INDICE FROM @tempCustomer WHERE INDICE_TEMP = @id)
    SET @temp_data = (SELECT DATAMEMO FROM @tempCustomer WHERE INDICE_TEMP = @id)


    IF @temp_data LIKE '*!01%'
      UPDATE TABLE_TO_UPDATE SET DATAMEMO = UDT.SDA2 FROM 
      UPDATE_DATA_TABLE UDT WHERE @temp_indice = 
      TABLE.INDICE
    ELSE IF @temp_data LIKE '*!02%'
      UPDATE TABLE_TO_UPDATE SET DATAMEMO = UDT.SDA3 FROM 
      UPDATE_DATA_TABLE UDT WHERE @temp_indice = 
      TABLE.INDICE
    ELSE IF @temp_data LIKE '*!03%'
      UPDATE TABLE_TO_UPDATE SET DATAMEMO = UDT.SDA4 FROM 
      UPDATE_DATA_TABLE UDT WHERE @temp_indice = 
      TABLE.INDICE
    ELSE IF @temp_data LIKE '*!04%'
      UPDATE TABLE_TO_UPDATE SET DATAMEMO = UDT.SDA5 FROM 
      UPDATE_DATA_TABLE UDT WHERE @temp_indice = 
      TABLE.INDICE
    ELSE IF @temp_data LIKE '*!05%'
      UPDATE TABLE_TO_UPDATE SET DATAMEMO = UDT.SDA1 FROM 
      UPDATE_DATA_TABLE UDT WHERE @temp_indice = 
      TABLE.INDICE

  SET @id = @id +1
  SET @iter = @iter +1
 END
END

Коллега посоветовал мне использовать курсоры для такой задачи, но я не знаю, как это сделать.

Обновлено:

  • Структура TABLE_TO_UPDATE:

    1. Столбец 1: Индекс
    2. Столбец 2: Имя
    3. Столбец 3: Фамилия
    4. Колонка 4: DATAMEMO
  • Структура UPDATE_DATA_TABLE:

    1. Столбец 1: Кампания
    2. Столбец 2: SDA1
    3. Столбец 3: SDA2
    4. Колонка 4: SDA3
    5. Колонка 5: SDA4
    6. Колонка 6: SDA5

Есть еще одна таблица (Campaign_Table), содержащая все названия кампаний / таблиц (название кампаний аналогично названию таблиц).

  • Структура Campaign_Table:
    1. Столбец 1: ID
    2. Столбец 2: Campaign_name

Что я устал делать, так это получить название кампании, которую нужно изменить, а затем передать его в переменную, чтобы заменить "TABLE_TO_UPDATE" в коде.

Привет и добро пожаловать в SO. Нам нужно увидеть некоторые подробности о вашей системе, чтобы мы могли помочь. Здесь - отличное место для начала.

Sean Lange 13.09.2018 18:04

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

Gordon Linoff 13.09.2018 18:08

Похоже, что решение на чистом SQL доступно без процедурных расширений.

Parfait 13.09.2018 20:47

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

JERRY 14.09.2018 08:32

Привет, я только что отредактировал пост и добавил структуры таблиц «Я не смог опубликовать код или снимок экрана с таблицами из-за ограничений конфиденциальности». Надеюсь, я дал вам необходимую информацию.

BaDumTss 14.09.2018 12:19
0
5
537
0

Другие вопросы по теме