Обновлять несколько таблиц во время их циклирования с помощью курсора (SQL Server) - PullRequest
0 голосов
/ 13 сентября 2018

Я не знаю, отражает ли заголовок то, что я спрашиваю, но у меня есть несколько таблиц, которые я хочу обновить, используя поле из таблицы, которую я назову "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" в коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...