防止使用前ANSI-92旧语法

时间:2014-04-09 21:11:25

标签: sql sql-server

我想知道是否有办法阻止创建包含旧的ansi sintax连接的对象,也许是服务器触发器,任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:1)

您可以创建DDL trigger并为proc的内容挖掘eventdata()XML。如果您可以使用一些奇特的字符串解析函数(可能在已知表名之间查找逗号或查找*==*)来检测旧语法,那么您可以回滚创建proc或功能

答案 1 :(得分:1)

第一反应 - 代码审核和体面的质量保证流程!

我在sys.syscomments.text看到了一些成功。一个简单的where text like '%*=%'应该做。请注意,长SQL字符串可能会跨多行分割。我意识到这不会阻止物体进入那里。但是DDL触发器不会告诉你当前的问题有多大。

答案 2 :(得分:1)

虽然我完全理解你的努力,但我相信这种行为是获取你想要的地方的错误方式。首先,你可能会对你的老板遇到严重的麻烦,并且根据你的工作地点,你会被解雇。

其次,如前所述,进行代码审查,解释为什么旧语法很糟糕。你必须有一个合理的理由,为什么人们应该避免* =的东西。 “因为你不喜欢它”不是一个可行的论据。事实上,有很多文章表明使用这种语法无法解决某些问题。

第三,您可能想指出将条件分为分组(JOIN ... ON...)和过滤条件(WHERE...)会增加可读性,因此可能是一种选择。

收集你的论点并说服你的同事,而不是以相当傲慢的方式惩罚他们。