有没有办法写这个,所以它可以在一行代码上?
IF (ISNULL(@param1,'1') = '1' AND ISNULL(@param2,'') = '')
exec sp_CheckNill @param2, '@param2 cannot be NULL if @param1 is NOT NULL'
Run Code Online (Sandbox Code Playgroud)
对于不可避免的"为什么?" 问题:除了更紧凑之外,如果我连续做了很多这样的话,可读性要好得多,因为每行之间的个体差异更加明显.
编辑:
我是个白痴.所有在一行上确实有效:
IF (ISNULL(@param1,'1') = '1' AND ISNULL(@param2,'') = '') exec sp_CheckNill @param2, '@param2 cannot be NULL if @param1 is NOT NULL'
Run Code Online (Sandbox Code Playgroud)
我删除了这个问题,除了下面的@James发布了一个内容丰富的相关答案.
可以吗,是的.但是,您必须非常小心,因为空格的类型(返回与空格)不会影响SQL(或大多数编程语言).通过将一个IF陈述的正文放在同一条线上,你可以欺骗你后来的自己或其他人认为这个空白实际上有所作为(即使你有意识地知道它没有).
这里有些例子:
IF @condition=1 EXEC func1 EXEC func2
Run Code Online (Sandbox Code Playgroud)
将始终执行func2,即使从格式化它似乎是一部分IF.
ELSE 条款增加了混乱:
IF @condition1=1
IF @condition2=1 EXEC func1
ELSE EXEC func2
Run Code Online (Sandbox Code Playgroud)
在这种情况下,func2如果@ contition1为零,则不会执行.它只会在@ condition1为1且@ condition2不为1时执行,因为ELSE它与第二个IF而不是第一个绑定,尽管格式化使它看起来像.
由于这些问题,许多公司都有严格的编码指南,禁止在IF没有明确BEGIN和END陈述的情况下使用s (或者在许多其他编程语言的情况下使用括号),这使得所有这些陈述都清楚.你必须自己决定如何避免这种混乱.
| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |