Как сделать несколько операторов выбора в виде SQL и изменить данные через представление?
У меня есть несколько заявлений, которые я хотел бы сделать
CREATE VIEW dbo.vw_customers_addresses_services_servicetanks
Вот мои ВЫБОРНЫЕ ЗАЯВЛЕНИЯ:
SELECT * FROM Customers
WHERE EXISTS
(SELECT * FROM Addresses
WHERE Addresses.OwnerId = Customers.Id
AND Addresses.OwnerId = 97587
AND Addresses.TenantId = 1013);
(SELECT * FROM Addresses
WHERE Addresses.OwnerId = 97587
AND Addresses.TenantId = 1013
AND Addresses.Type = 'Delivery');
SELECT * FROM dbo.Services
WHERE EXISTS
(SELECT * FROM Addresses
WHERE Addresses.Id = Services.AddressId
AND Addresses.OwnerId = 97587
AND Addresses.TenantId = 1013);
(SELECT ServiceTanks.*
FROM ServiceTanks, Addresses, Services
WHERE Services.Id = ServiceTanks.ServiceId
AND Addresses.Id = Services.AddressId
AND Addresses.OwnerId = 97587
AND Addresses.Tenantid = 1013)
который сейчас работает как оператор множественного выбора. Однако моя цель состоит в том, чтобы ИЗМЕНИТЬ ДАННЫЕ ЧЕРЕЗ SQL-ПРОСМОТР, где я могу просто сделать быстрое ОБНОВЛЕНИЕ РЕЗУЛЬТАТА AddressID из третьего оператора выбора с использованием SSMS и магии EDIT TOP X ROWS.
Когда я помещаю свой CREATE VIEW над первым оператором select, он дает большой красный волнистый круг с "Неверным синтаксисом:" CREATE VIEW "должен быть единственным оператором в пакете".
Я сплю или это можно сделать так, как я описал?
1 ответ
Документы... https://docs.microsoft.com/en-us/sql/relational-databases/views/modify-data-through-a-view
Пример кода для изменения данных через представление, которое имеет много базовых операторов выбора (таблиц).
--tables
if exists (select * from sys.tables where name = 'table1')
drop table table1
go
if exists (select * from sys.tables where name = 'table2')
drop table table2
go
create table table1 (tkey1 int identity(1,1), fk int, name varchar(32));
create table table2 (tkey2 int identity(1,1), name varchar(32));
--data
insert into table2 (name) values ('MS')
insert into table2 (name) values ('OSS')
insert into table2 (name) values ('Oracle')
insert into table1 (fk, name) values (3, 'SQL')
insert into table1 (fk, name) values (1, 'postgreSQL')
insert into table1 (fk, name) values (2, 'mySQL')
go
if exists (select * from sys.views where name ='vw')
drop view vw
go
create view vw
as
select t1.tkey1, t1.fk, t1.name as t1_name, t2.tkey2, t2.name as t2_name from table1 t1 inner join table2 t2 on t1.fk = t2.tkey2
go
select * from vw
go
begin tran
update vw set fk = 2 where fk = 1
update vw set fk = 1 where fk = 3
update vw set fk = 3 where fk = 2
select * from vw
rollback tran
begin tran
update vw set t2_name = 'OSS' where fk = 1
update vw set t2_name = 'MS' where fk = 3
update vw set t2_name = 'Oracle' where fk = 2
select * from vw
commit tran