Sql server 若视图和存储过程都只包含一条select语句,那个么SQL Server中的区别是什么

Sql server 若视图和存储过程都只包含一条select语句,那个么SQL Server中的区别是什么,sql-server,tsql,stored-procedures,Sql Server,Tsql,Stored Procedures,我知道性能方面的存储过程比view更好,而且存储过程还有很多好处。然而,我不明白两者的区别是什么,因为它们都有一个select语句,如下所示 Create view viewName As Select * from tableName; 及 您好,我知道存储过程比视图有很多优势,但我的问题只是基于上面提到的查询。 注意-如果两者看起来都像上面提到的那样,那么区别是什么呢?在这样一个简单的例子中没有。视图只是表中的select语句。这样做是为了清晰或易于使用 其中存储过程只能执行选择操

我知道性能方面的存储过程比view更好,而且存储过程还有很多好处。然而,我不明白两者的区别是什么,因为它们都有一个select语句,如下所示

Create view viewName
As
    Select * from tableName;

您好,我知道存储过程比视图有很多优势,但我的问题只是基于上面提到的查询。
注意-如果两者看起来都像上面提到的那样,那么区别是什么呢?

在这样一个简单的例子中没有。视图只是表中的select语句。这样做是为了清晰或易于使用


其中存储过程只能执行选择操作。但它做的更多。您可以处理每一行并操作列,也可以查询其他表并返回可选的行,或者与其他行或其他表的行组合返回。你可以在里面写一个“程序”。

有几个区别:

程序不能执行的操作:

  • 无法将过程的结果联接到另一个表
  • 不能使用WHERE子句来减少过程返回的行数
  • 不能在子选择中使用存储过程的结果
  • 您不能将数据“插入”过程(就像您可以使用视图那样)
视图不能做什么

  • 在检索数据时不能对数据应用(复杂)转换(除了更改单个值的简单函数)
  • 不能将参数传递给视图(尽管附加到视图的WHERE子句也可以用于类似目的)
存储过程:

  • 接受参数
  • 不能在较大的查询中用作构造块
  • 可以包含多个语句、循环、
    IF-ELSE
  • 可以对一个或多个表执行修改
  • 不能用作
    插入
    更新
    删除
    语句的目标
视图:

  • 不接受参数
  • 可以在较大的查询中用作构建块
  • 只能包含一个
    SELECT
    查询
  • 无法对任何表执行修改
  • 但是(有时)可以用作
    INSERT
    UPDATE
    DELETE
    语句的目标

存储过程可以参数化,例如,您可以根据参数仅检索特定搜索条件的行。视图不能这样做。另一方面,可以将视图设置为“可插入”,这样您就可以插入值—或者通过使视图本身可插入,或者通过提供
而不是insert
触发器—存储过程不能这样做that@marc_s:关于参数:视图上的
where
子句可用于检索特定搜索条件的行(但我同意这不完全是一回事)@带有\u no\u名称的\u horse\u:已同意-但视图本身仍然拥有所有行-如果您从中选择而不使用where子句,则可以获取所有行。如果存储过程需要参数,则可能无法执行此操作that@marc_s:谢谢您的输入。我知道存储过程比视图有很多优势,但我的问题是仅基于上述查询。如果两者看起来都像上面提到的,那么区别是什么?请参阅@a_horse_with_no_name的优秀答案-似乎很好地解释了差异(例如,无法将存储过程中的结果集连接到另一组数据)
Create procedure spName
As
    Select * from tableName;