直接插入视图与表格有什么好处?例如情景#1
如果视图只有表中的几列,您仍然可以成功插入吗?例如情景#2
场景#1:
CREATE TABLE dbo.tbl1
(
ID INT NOT NULL,
NAME VARCHAR(32) NOT NULL
);
CREATE VIEW dbo.vw_x
AS
SELECT ID, Name
FROM dbo.tbl1
WHERE ID = 2
INSERT INTO dbo.vw_x
SELECT 2, 'Name';
场景#2:
CREATE TABLE dbo.tbl1
(
ID INT NOT NULL,
NAME VARCHAR(32) NOT NULL
);
CREATE TABLE dbo.tbl2
(
ID INT NOT NULL,
VALUE VARCHAR(32) NOT NULL
);
CREATE VIEW dbo.vw_x
AS
SELECT t1.ID, t2.Value
FROM dbo.tbl1 t1
INNER JOIN dbo.tbl2 t2
ON t1.ID = t2.ID
WHERE t1.ID = 2
INSERT INTO dbo.vw_x
SELECT 2, 'Name';
答案 0 :(得分:3)
通常,如果用户未被授予对基础表的权限,则可能会插入到视图中。
关于"如何插入",这是来自CREATE VIEW语句的MSDN article:
可更新视图
您可以修改基础基表的数据 通过视图,只要满足以下条件:
必须进行任何修改,包括UPDATE,INSERT和DELETE语句 仅来自一个基表的引用列。
视图中要修改的列必须直接引用表列中的基础数据。无法以任何其他方式派生列,例如通过以下方式:
聚合函数:AVG,COUNT,SUM,MIN,MAX,GROUPING,STDEV,STDEVP,VAR和VARP。
计算。无法从使用其他列的表达式计算列。通过使用集合运算符UNION,UNION ALL,CROSSJOIN,EXCEPT和INTERSECT形成的列相当于计算并且也不可更新。
正在修改的列不受GROUP BY,HAVING或DISTINCT子句的影响。
TOP不会在视图的select_statement中的任何位置与WITH CHECK OPTION子句一起使用。
以前的限制适用于FROM中的任何子查询 视图的子句,就像它们适用于视图本身一样。通常, 数据库引擎必须能够明确地跟踪修改 从视图定义到一个基表。