
有的可以,有的不可以,视图与表是两个概念,UPDATE视图,实际就是修改了视图对应的表中的数据,自己可以测试一下!但如果视图中没有表(因为有的视图并不一定有表),则不能更新!比如:
create view ass (a, b, c) AS select 0, 's', 0 就不依赖表,当然不能更新,如果在生成视图的SQL语句中有UNION关键字时,也不能更新,其它很多视图是可以更新和修改的,修改的列是对应的表中的列。
--楼主有两个方法
--一个是删除 插入
if object_id('table1')>0 drop table table1
go
select into table1 from tbname
--另外一个是触发器 这个是 时时触发的 能很好完成同步效果
--给你写个框架 因为你没有表结构 我没法给你写完 有什么问题可以随时找我 希望采纳
create TRIGGER 触发器名
ON 表名
for insert,update,delete
AS BEGIN
if exists(select 1 from inserted) and not exists(select 1 from deleted)
begin
--插入 *** 作
end
else if exists(select 1 from inserted) and exists(select 1 from deleted)--update触发器
begin
--更新 *** 作
end
else if not exists(select 1 from inserted) and exists(select 1 from deleted)--delete触发器
begin
--删除 *** 作
end
END
go
对于没有复杂处理的 单表 视图, 是可以 UPDATE 的。
例如这样的视图:
CREATE VIEW v_1 AS SELECT FROM 某表。
但是假如你的视图, 是单表的, 带统计的, 那恐怕是不能 直接 UPDATE 了。
例如这样的视图:
CREATE VIEW v_2 AS SELECT id, COUNT() as num FROM 某表--前面是单表的, 下面说多表的 ---
对于2张表的,假如你的查询里面, 这2张表是 一对一的关系。 且视图里面, 包含了主键,那么是可以 UPDATE 的。
例如下面这样的视图:
CREATE VIEW temp_view AS
SELECT
t1name AS t1Name,
t1age AS t1Age,
t2name AS t2Name,
t2age AS t2Age
FROM
t1, t2
WHERE
t1name = t2name
然后直接更新视图。
UPDATE temp_view SET t1Age = t2Age;
完整的例子, 可参考:
>
但是假如你的视图里面的 2个表, 不是一一对应的。
或者是带了 SUM / COUNT 等统计函数的, 那么可能是没办法更新了。
以上就是关于SQL 数据库里是否可以通过视图更改表中的数据全部的内容,包括:SQL 数据库里是否可以通过视图更改表中的数据、SQL SERVER:在SELECT视图中,同步可以更新视图的数据。如何做到、SQL数据库里是否可以通过视图更改表中的数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)