powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Так можно ли обновить 2 таблицы за раз через обновление view?
6 сообщений из 6, страница 1 из 1
Так можно ли обновить 2 таблицы за раз через обновление view?
    #40014386
Здравствуйте!

Надо обновить одну и ту же таблицу, поменяв в ней значения в одном из столбцов местами
Почитал, что можно обновить две таблицы за раз, если объединить их во view. Хоть в моем случае таблица одна, но идея понравилась.
Вот исходные данные и задумка по обновлению:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
CREATE TABLE tmp_test(
	id INT UNIQUE,
	period date,
	type int,
	value INT
);
INSERT tmp_test VALUES(1,'20200101', 1, 234);
INSERT tmp_test VALUES(2,'20200101', 2, 432);

CREATE VIEW tmp_test_view AS
SELECT
	t1.period
	, t1.type type1
	, t1.value value1
	, t2.type type2
	, t2.value value2
FROM tmp_test t1
JOIN tmp_test t2 ON t1.period = t2.period AND t1.type <> t2.type
WHERE
	t1.type = 1

UPDATE v
SET
	v.value1 = v.value2
	, v.value2 = v.value1
FROM tmp_test_view v


В итоге UPDATE вернул ошибку авторНевозможно обновить представление или функцию "v", так как изменение влияет на несколько базовых таблиц.
Так можно все-таки обновить 2 таблицы через view за раз?
...
Рейтинг: 0 / 0
Так можно ли обновить 2 таблицы за раз через обновление view?
    #40014393
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Борис Гаркун,

простым способом никак.

Можно использовать выражение output, чтобы собрать изменения в первой таблице и с помощью полученного набора обновить вторую таблицу.
...
Рейтинг: 0 / 0
Так можно ли обновить 2 таблицы за раз через обновление view?
    #40014416
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Борис Гаркун
Надо обновить одну и ту же таблицу, поменяв в ней значения в одном из столбцов местами
Почитал, что можно обновить две таблицы за раз, если объединить их во view.
Непонятно, как связаны эти два предложения?

Просто обновляете таблицу в запросе UPDATE, присоединив эту таблицу ещё раз, без всяких VIEW
...
Рейтинг: 0 / 0
Так можно ли обновить 2 таблицы за раз через обновление view?
    #40014419
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Борис Гаркун
Так можно все-таки обновить 2 таблицы через view за раз?
Нельзя. Физически обновлять можно только одну таблицу.

Можно псевдо "за раз" путем написания для представления триггера instead of update, в котором все равно будут две инструкции update.
Более того, еще придется во избежание возможных проблем с согласованностью данных писать не update v, а update v with (updlock).
...
Рейтинг: 0 / 0
Так можно ли обновить 2 таблицы за раз через обновление view?
    #40014426
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm
Борис ГаркунТак можно все-таки обновить 2 таблицы через view за раз?
Нельзя. Физически обновлять можно только одну таблицу.Так у ТС одна таблица!

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE TABLE #tmp_test(
	id INT UNIQUE,
	period date,
	type int,
	value INT
);
INSERT #tmp_test VALUES(1,'20200101', 1, 234);
INSERT #tmp_test VALUES(2,'20200101', 2, 432);

select * from #tmp_test

update t1
set value = (select t2.value from #tmp_test t2 where t1.period = t2.period AND t1.type <> t2.type)
from #tmp_test t1

select * from #tmp_test
...
Рейтинг: 0 / 0
Так можно ли обновить 2 таблицы за раз через обновление view?
    #40014447
Спасибо
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Так можно ли обновить 2 таблицы за раз через обновление view?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]