在sql Server Management Studio中使用视图时,我更喜欢将视图编写为ALTER语句,进行更改,正确格式化代码然后执行语句.但是,有时当我编写一个我之前使用过的视图时,我的格式化会丢失,并且我看到我的视图中添加了大量扩展属性.
从此我收集到,其他人一直在使用SSMS查询编辑器(设计者)来编辑视图,这很烦人,因为它完全破坏了我的格式.
有没有办法阻止用户使用设计器来改变SSMS中的视图?理想情况下,某些数据库设置,但也可能是一些阻止设计者打开视图的黑客攻击.
实用的方法只是与用户交谈,让他们停止使用设计师,但我担心老习惯会很难,我不想再花一分钟重新格式化我已经多次格式化的代码…
解决方法
没有一种强有力的方法可以做到这一点.
WHERE (1 = (SELECT ROW_NUMBER() OVER (ORDER BY @@SPID)))
但它并没有真正起作用.打开视图时,您会看到该消息
sql text cannot be represented in the grid pane and diagram pane.
并且这些窗格是空白的,但sql窗格仍然出现并包含重新格式化的sql以进行编辑.此外,上述还存在以负面方式改变执行计划的风险.
另一种方法可能是创建DDL触发器.
我在设计器和查询窗口中看到的默认program_name字符串是“Microsoft sql Server Management Studio”和“Microsoft sql Server Management Studio – Query”,因此您可以使用.
CREATE TRIGGER NoAlterViewFromSSMS ON DATABASE FOR ALTER_VIEW AS IF APP_NAME() = 'Microsoft sql Server Management Studio' BEGIN RAISERROR ('Please don''t use the designer to ALTER views',16,1) ROLLBACK END GO
但是,直到他们试图挽救并且你的同事可能非常恼火时才会开火.管理工作室使用的AppName无论如何都是可配置的,所以这也可以被规避.
我能想到的唯一另一个选择是在Connect网站上搜索阻止设计者打开的错误(我依稀记得一个有嵌套注释语法的错误),但即使你找到一个你有风险,他们将被修复未来的服务包.