--我们可以用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
select * from 自定义函数(表值函数)
但是不能:select * from 存储过程 只能: insert #t exec 存储过程
select * from 存储过程 或者:select * from OPENROWSET('MSDASQL',
'DRIVER={SQL Server};SERVER=服务器名称;UID=sa;PWD=MyPass',
exec 存储过程) AS a
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
视图是表上的集合,实际内容不单独在数据库中存储;视图的优点在于屏蔽一些用户无需了解或者不想让用户知道的字段,增前安全性以及易用性。
自定义函数则是实现某种自定义功能的函数,主要是用于调用并返回期望的结果。
至于他们之间的限制,这个一下子也不太容易说清楚,可以查阅一下 SQL SERVER 联机帮助,或许你会有新的认识。
视图可以:
为用户提供相关的数据
隐藏数据的复杂性
从导构源组织数据
减少对象大小表是存放現實的數據﹐視圖查詢得出的數據是由表來的。如果这个数据是经过一些条件或关联的,则用视图应该快一点,因为视图是经过预编译的,执行的算法已经确定,而直接取的话,要根据你的sql来确定算法.
而存储过程1、存储过程是用户写好后编译好的过程,调用的时候直接调用就行了,减少了编译的时间。
2、存储过程直接存在服务器上,减少了客户端与服务端的传输过程。
3、可以直接调用,很方便,可以重复使用,而不需要知道内部是怎么做的。
4、安全性,这样用也增加了安全性。函數,
用來完成某一物定功能 的