--我们可以用select * from 视图
            select * from 自定义函数(表值函数)
  但是不能:select * from 存储过程  只能: insert #t exec 存储过程
        select * from 存储过程  或者:select * from OPENROWSET('MSDASQL',
       'DRIVER={SQL Server};SERVER=服务器名称;UID=sa;PWD=MyPass',
       exec 存储过程) AS a

解决方案 »

  1.   

    --单语句表值函数和视图的区别  1.单语句表值函数可以传递参数,而视图不可以,可以说综合了存储过程和视图的优点.
      
      2.存储过程不能随意的安排返回的字段的数目,而表值函数和视图可以.
        当然,存储过程可以通过上边的临时表来实现.例如:CREATE FUNCTION dbo.itvf_authors  --单语句表值函数
        ( @au_lname VARCHAR(40) ) 
         RETURNS TABLE 
         RETURN 
         SELECT  au_id, au_fname, au_lname, city, state
         FROM    authors
         WHERE   au_lname = @au_lname
         go
       
        SELECT a.*, t.title_id               --和别的表进行连接操作
        FROM   dbo.itvf_authors( @author ) a
        JOIN   titleauthor t 
        ON     a.au_id = t.au_id
      

  2.   

    存储过程是一系列SQL语句的集合,是一个统一的事务;比起单独的语句集合,具有高效性以及其他一些有点;
    视图是表上的集合,实际内容不单独在数据库中存储;视图的优点在于屏蔽一些用户无需了解或者不想让用户知道的字段,增前安全性以及易用性。
    自定义函数则是实现某种自定义功能的函数,主要是用于调用并返回期望的结果。
    至于他们之间的限制,这个一下子也不太容易说清楚,可以查阅一下 SQL SERVER 联机帮助,或许你会有新的认识。
      

  3.   

    视图與表视图它是一个虚表,沒有存放現實的數據﹐简单的说它是用来查询的一种用户定主的查询规则。所有的操作数据是基于基表的!
    视图可以:
    为用户提供相关的数据
    隐藏数据的复杂性
    从导构源组织数据
    减少对象大小表是存放現實的數據﹐視圖查詢得出的數據是由表來的。如果这个数据是经过一些条件或关联的,则用视图应该快一点,因为视图是经过预编译的,执行的算法已经确定,而直接取的话,要根据你的sql来确定算法.
    而存储过程1、存储过程是用户写好后编译好的过程,调用的时候直接调用就行了,减少了编译的时间。
    2、存储过程直接存在服务器上,减少了客户端与服务端的传输过程。
    3、可以直接调用,很方便,可以重复使用,而不需要知道内部是怎么做的。
    4、安全性,这样用也增加了安全性。函數,
    用來完成某一物定功能 的