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