您的位置:首页 > 数据库 > SQL

视图中需要注意的几个问题

2011-08-07 20:46 603 查看
1.如果视图中有依赖对象,如果让视图能正常工作,那面所依赖的对象必须存在

例如

ALTER VIEW vProductCosts

AS

SELECT ProductID,ProductSubcategoryID,Name,ProductNumber,StandardCost

FROM Production.Product

CREATE VIEW vProductCosts2

AS

SELECT Name,StandardCost from vProductCosts

如果这时删除第一个

DROP VIEW vProductCosts

查询第二个

SELECT * FROM vProductCosts2

就会报错

可以利用可选指令SCHEMEBINDING,它会告诉SQL Server检查依赖关系,不允许任何破坏这些依赖关系的修改

CREATE VIEW vProductCosts WITH SCHEMABINDING

AS

SELECT ProductID,ProductSubcategoryID,Name,ProductNumber,StandardCost

FROM Production.Product

GO

CREATE VIEW vProductCosts2 WITH SCHEMABINDING

AS 

SELECT Name,StandardCost

FROM dbo.vProductCosts

上面的例子中存在一些明显的独特需求。

首先,对于要进行模式绑定的视图,它依赖的任何对象必须是模式绑定的。虽然表内置了对模式的绑定支持,但是视图需要显示地绑定模式

在引用对象之前,其依赖的任何对象必须存在于数据库。因此,必须在依赖的CREATE对象语句之间用批处理结束语句。这个例子使用GO语句作为创建第一个视图的终结。
在引用依赖的视图时,必须使用一个具有两部分的名字,必须使用模式名。对已进行模式绑定的视图将不能使用SELECT *语法,所有的列都必须被显示地引用。
2.行的排序
在使用视图设计器的时候,如果不指定TOP语句,视图设计器就不允许对视图中的行排序。
可以使用下面的方法
CREATE VIEW vOrderProductCosts
AS
SELECT TOP 100 PERCENT ProdcutID,Name,ProductNumber,StandardCost
FROM Production.Product
ORDER BY Name
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息