如果你需要改变或者更新一个视图(view)或者维护当前的存储过程或者触发器我建议你使用ALTER VIEW尽管停止视图并重新建立视图是一个诱人的想法但这样做有可能会删除视图上的全部许可(permission)存储过程和触发器 ALTER VIEW的语法几乎与CREATE VIEW完全相同而且像CREATE VIEW那样你可以通过添加WITH ENCRYPTION和(或者)WITH SCHEMABINGDING来改变一个视图 但是使用ALTER VIEW还是有几个需要注意的地方如果你的视图访问新的对象那么该视图的许可必须和新对象的许可一样否则视图不能成功访问新对象 此外修改视图的用户必须拥有与该视图有关的表格视图表格值函数的ALTER VIEW和SELECT许可以及对该视图调用的标量函数(scalarvalued function)的EXECUTE许可 你还需要牢记一点如果你最初用WITH ENCRYPTION或者CHECK OPTION创建的视图你必须在ALTER VIEW语句后面再次包含这些参数也就是说如果你修改了视图那么你必须重新设置WITH ENCRYPTION和CHECK OPTION这些参数不会自动保留下来 在下面的例子中我将创建一个简单的视图并运行它然后我将修改它确认它的结果并用sp_helptext来查看视图文本中改变的地方 首先我将建立一个简单的视图它将调出authors表格中所有加利福尼亚州作者的名姓以及所在城市 CREATE VIEW vwCalAuthors AS Select au_fname au_lname city FROM authors where state = CA With CHECK OPTION GO 让我们看看这个视图工作的情况如何 SELECT * FROM vwCalAuthors au_fname au_lname city Johnson WhiteMenlo Park Marjorie Green Oakland CherylCarson Berkeley HeatherMcBaddenVacaville ( row(s) affected) 现在我决定让这个视图只反映加尼弗尼亚州奥克兰市的作者情况 ALTER VIEW vwCalAuthors AS Select au_fname au_lname city FROM authors WHERE state = CA and city = Oakland GO 让我们运行这个result set来得到奥克兰市的作者信息 au_fnameau_lnamecity Marjorie Green Oakland Dean Straight Oakland Dirk Stringer Oakland Stearns MacFeatherOakland LiviaKarsenOakland ( row(s) affected) 最后如果相对于运行result set你更情愿调用改变后的视图文本你可以用sp_helptext系统存储过程来查看隐藏在视图后面的文本(记住ALTER VIEW改变了视图最初创建时在第一位置所使用的CREATE VIEW语句因此在你的结果中你应该看到的语句) 注意想一想我们还遗漏了什么我们在修改视图时没有包括CHECK OPTION现在它已经没有了在每次修改视图时我们都必须手工重置CHECK OPTION和WITH ENCRYTION Sp_helptextvwCalAuthors Text
CREATE VIEW vwCalAuthors AS Select au_fname au_lname city FROM authors WHERE state = CAand city = Oakland |