Я не знаю, отражает ли заголовок то, что я спрашиваю, но у меня есть несколько таблиц, которые я хочу обновить, используя поле из таблицы, которую я назову "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
Коллега посоветовал мне использовать курсоры для такой задачи, но я действительно не знаю, как.
РЕДАКТИРОВАТЬ:
Существует еще одна таблица (Campaign_Table), содержащая все названия кампаний / таблиц (название кампаний аналогично названию таблиц).
- Campaign_Table :
- Столбец 1: ID
- Столбец 2: Campaign_name
То, что мне надоело, - это выбрать название кампании для изменения, а затем передать его в переменную, чтобы заменить "TABLE_TO_UPDATE" в коде.