У меня есть триггер, который получает вставки и обновления для представления. Мне нужно найти столбцы, которые изменяются и получить значение в правильной таблице.
INSERT INTO TempTableAttr_Lot(ID, [% Num]) VALUES(3, 24.0)
Я пытаюсь выяснить, как в моем триггере получить значение столбца ID и [% Num]. Проблема в том, что во вставке или обновлении может быть установлено 32 разных столбца, поэтому я хочу просмотреть список, чтобы увидеть, находится ли этот столбец в таблице «вставок».
Одна проблема заключается в том, что, если я использую exec или execute, для построения динамического запроса, вставленный объект не входит в сферу действия.
Представление является динамическим в том смысле, что если атрибуты добавляются, то представление восстанавливается хранимой процедурой, поэтому я не могу предположить, какие имена столбцов находятся в представлении в любой момент времени, оно может увеличиваться и уменьшаться.
В идеале я хотел бы сделать SET @Value = (SELECT i.[@Name] FROM inserted i)
Но @Name - это не имя столбца, а переменная в моем триггере, поэтому при попытке
DECLARE @ValueTable TABLE ( value sql_variant)
INSERT INTO @ValueTable EXECUTE('SELECT i.[' + @Name + '] FROM inserted i')
SET @Value = CONVERT(nvarchar(128), (SELECT DISTINCT * FROM @ValueTable))
это не сработало, так как вставленный элемент не находится в области видимости.
Для первого цикла @Name = 'ID', а для второго это будет 'Col2', который не был вставлен, поэтому значение @Value должно быть нулевым, и я продолжаю циклически перебирать возможные имена столбцов до тех пор, пока финиш, и триггер обработан.
Я называю это триггером, он определяется как:
CREATE TRIGGER TempTableAttr_LotTrigger
ON TempTableAttr_Lot
INSTEAD OF UPDATE, INSERT
Я сейчас тестирую с помощью команды INSERT. Я понимаю, что при обновлении мне может понадобиться посмотреть на «удаленную» таблицу.
ОБНОВЛЕНИЕ: я предполагаю, что в данный момент вставляется только одна строка для моего теста, чтобы увидеть, как заставить это работать. Это для базы данных атрибут-сущность, но у меня есть представление, которое делает его реляционным. При использовании службы интеграции, когда происходит обновление, любые вставки или обновления представления будут вызывать триггер. Я просто пытаюсь понять, как получить необходимую мне информацию, чтобы я мог обновить правильную таблицу с правильными значениями.