阻止查询编辑器改变SQL Server Management Studio中的视图

 zhouwenjun 发布于 2023-01-07 19:46

在SQL Server Management Studio中使用视图时,我更喜欢将视图编写为ALTER语句,进行更改,正确格式化代码然后执行语句.但是,有时当我编写一个我之前使用过的视图时,我的格式化会丢失,并且我看到我的视图中添加了大量扩展属性.

从此我收集到,其他人一直在使用SSMS查询编辑器(设计者)来编辑视图,这很烦人,因为它完全破坏了我的格式.

有没有办法阻止用户使用设计器来改变SSMS中的视图?理想情况下,某些数据库设置,但也可能是一些阻止设计者打开视图的黑客攻击.

实用的方法只是与用户交谈,让他们停止使用设计师,但我担心老习惯会很难,我不想再花一分钟重新格式化我已经多次格式化的代码...

1 个回答
  • 没有一种强有力的方法可以做到这一点.

    添加设计者不支持但不改变语义的构造可能是一种可能性

    WHERE (1 = (SELECT ROW_NUMBER() OVER (ORDER BY @@SPID)))
    

    但它并没有真正起作用.打开视图时,您会看到该消息

    SQL文本无法在网格窗格和图表窗格中表示.

    并且这些窗格是空白的,但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网站上搜索阻止设计者打开的错误(我依稀记得一个有嵌套注释语法的错误),但即使你找到一个你有风险,他们将被修复未来的服务包.

    2023-01-07 19:51 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有