Member 13968321 Ответов: 1

Как автоматически обновить табличные данные на основе другого табличного значения?


У меня есть таблица 1, которую я заполнил, используя данные из таблицы а и таблицы В. В настоящее время, как только пользователь вносит изменения в данные любой таблицы а, выполняется запрос на обновление таблицы а, а затем другой запрос обновляет таблицу 1.
Как сделать так, чтобы Таблица 1 автоматически обновлялась при наличии каких-либо изменений в таблице а?

Что я уже пробовал:

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

Richard Deeming

Не могли бы вы использовать представление вместо таблицы? Таким образом, он всегда будет обновляться.

Member 13968321

Я никогда раньше не пользовался view, так что это не приходило мне в голову. Использую ли я его как обычный стол? Я предполагаю, что мне следует сделать представление для таблицы 1, если да, то сможет ли пользователь обновить данные оттуда? Или я неправильно это понимаю?

Richard Deeming

Вы можете запросить представление точно так же, как обычную таблицу.

Если вам нужно вставить, обновить или удалить записи из представления, а оно ссылается на данные из нескольких таблиц, вам необходимо добавить INSTEAD OF спусковой крючок.

Использование вместо триггеров в представлениях[^]
Использование вместо триггеров в SQL Server для операций DML[^]

1 Ответов

Рейтинг:
2

Santosh kumar Pithani

<pre>
--I hope this help full instead of Triggers offcourse Triggers is performance issue.
--I Have created sample table 
Declare @tableA table(Id int identity(1,1),Name Varchar(400));
Declare @Temp   table(Id INT,Name Varchar(400));
Declare @table1 table(Id int identity(1,1),Name Varchar(400));

---inserted same records in both tables @tableA and @table1

INSERT INTO @tableA VALUES('harish'),('santosh'),('sai'),('satish');

INSERT INTO @table1 VALUES('harish'),('santosh'),('sai'),('satish');

SELECT * FROM @tableA  WHERE id=2;
--updates name with 'NigamLucky' instead of 'santosh' in table @tableA
UPDATE @tableA SET Name='NigamLucky' OUTPUT INSERTED.* INTO @Temp  WHERE id=2;
--updates new values are inserted in @temp 
if(@@ROWCOUNT<>0)
BEGIN --@temp is joined and updated with @table1
UPDATE t1 set t1.name=t.Name from @table1 AS t1 INNER JOIN @Temp  AS t ON(t1.id=t.id)
END;
SELECT * FROM @tableA  WHERE id=2;
SELECT * FROM @table1  WHERE id=2;