Answers:
视图表示虚拟表。您可以在一个视图中联接多个表,并使用该视图来呈现数据,就好像数据来自单个表一样。
存储过程使用参数来执行功能……无论是更新和插入数据,还是返回单个值或数据集。
创建视图和存储过程 -Microsoft提供了一些有关何时以及为何使用它们的信息。
说我有两个表:
tbl_user
与列:user_id
,user_name
,user_pw
tbl_profile
与列:profile_id
,user_id
,profile_description
因此,如果我发现自己从那些表中查询很多...而不是在每条SQL中进行联接,我都将定义如下视图:
CREATE VIEW vw_user_profile
AS
SELECT A.user_id, B.profile_description
FROM tbl_user A LEFT JOIN tbl_profile B ON A.user_id = b.user_id
GO
因此,如果我想查询profile_description
由user_id
在将来,所有我需要做的就是:
SELECT profile_description FROM vw_user_profile WHERE user_id = @ID
该代码可以在存储过程中使用,例如:
CREATE PROCEDURE dbo.getDesc
@ID int
AS
BEGIN
SELECT profile_description FROM vw_user_profile WHERE user_id = @ID
END
GO
因此,稍后,我可以致电:
dbo.getDesc 25
然后我将获得user_id
25 的说明,其中的25
是您的参数。
显然还有更多细节,这只是基本概念。
这里有大量信息
这是一个很好的总结:
存储过程:
一个看法:
首先,您需要了解,两者是不同的东西。Stored Procedures
最适合用于INSERT-UPDATE-DELETE
语句。而Views
用于SELECT
语句。您应该同时使用它们。
在视图中,您无法更改数据。某些数据库具有可更新的视图,您可以INSERT-UPDATE-DELETE
在其中使用Views
。
视图是一种将复杂对象保存SELECT
在数据库中的简单方法。
当简单的SQL还不够时,将使用存储过程。存储过程包含变量,循环和对其他存储过程的调用。它是一种编程语言,而不是查询语言。
视图是静态的。可以将它们视为具有特定布局的新表,并使用您使用其创建的查询即时创建其中的数据。与任何SQL表,您可以排序和过滤用它WHERE
,GROUP BY
和ORDER BY
。
取决于您的工作。
取决于数据库。简单视图仅运行查询并过滤结果。但是像Oracle这样的数据库允许创建“物化”视图,该视图基本上是一个表,当视图的基础数据发生更改时,该表会自动更新。
物化视图允许您在视图的列上创建索引(尤其是在数据库中不存在的计算列上)。
我不明白你在说什么。
除了以上注释之外,我还想补充一些关于View的观点。
当Mahesh建议您不能更改视图中的数据时,他并不完全正确。所以以帕特里克的观点
CREATE View vw_user_profile AS
Select A.user_id, B.profile_description
FROM tbl_user A left join tbl_profile B on A.user_id = b.user_id
我可以更新数据...例如,我可以做任何一个...
Update vw_user_profile Set profile_description='Manager' where user_id=4
要么
Update tbl_profile Set profile_description='Manager' where user_id=4
您不能插入该视图,因为并非所有表中的所有字段都存在,并且我假设PROFILE_ID是主键,并且不能为NULL。但是,有时您可以插入视图中...
我使用...在现有表上创建了一个视图
Create View Junk as SELECT * from [TableName]
然后
Insert into junk (Code,name) values
('glyn','Glyn Roberts'),
('Mary','Maryann Roberts')
和
DELETE from Junk Where ID>4
在这种情况下,INSERT和DELETE均有效
显然,您无法更新任何聚合或计算的字段,但任何仅是直视图的视图都应可更新。
如果视图包含多个表,则不能插入或删除,但是如果视图仅是一个表的子集,则通常可以。