u23*_*534 5 sql-server-2008 sql-server
我们发现很多bug都是因为缺少逗号,
select
aaaa,
bbbb -- forgot comma
ccc,
dddddddd,
.....
Run Code Online (Sandbox Code Playgroud)
它是一种使expression name无效的方法并且它必须expression as name在SQL语句中吗?(不是全局的,因为缺少“as”存在的遗留代码)
不,没有办法强制使用这种语法,除非你通过一些解析 SQL 代码并支持查找这样的语法的 3rd 方工具传递所有查询,但我认为甚至编写一些可以做的事情将是非常困难的这个。
也不可能阻止某人输入FROM dbo.table nolock并且没有意识到在这种情况下nolock是别名,而不是锁定提示。这就是为什么这有效:
SELECT name FROM sys.objects nolock WITH (NOLOCK);
Run Code Online (Sandbox Code Playgroud)
此外,我发现expression AS alias语法远不如alias = expression- 因为,当我审查或排除代码故障时,我更有可能需要在一行的开头通过其别名来查找列,而不是通过阅读可能的内容是一个非常长且复杂的表达式,它跨越线条或向右离开屏幕,并在与所有其他线条不同的垂直点处结束。并且由于别名应该比表达式短,所以我将别名放在首位对我来说更有意义。
然而,归根结底,这是一种偏好,不,没有办法强迫它。不要让您的开发人员将他们的草率归咎于语言。这是应该在第二组眼睛看到该查询之前捕捉到的东西。我的意思是,计算您的查询返回了多少列有多难?
作为一种可能的解决方法,如果您的公司规定始终使用表别名作为列名的前缀,那么像您这样的查询将永远不会编译:
SELECT
t.aaaa,
t.bbbb -- the missing comma results in "Incorrect syntax near '.'"
t.ccc,
t.dddddddd
...
FROM tablename AS t
...
Run Code Online (Sandbox Code Playgroud)
这样,无论是谁编写或正在审查查询都会很快发现问题。
当然,我们都是人,我们也很容易忘记遵守规则。尽管如此,该方法可能会导致此类问题较少。