以一个简单的查询存储过程为例,简单说一下sql的几种写法( 四 )


第二 , 保证执行计划的重用 , 因为使用占位符来拼凑SQL的 , SQL参数的值不同并导致最终执行的SQL文本不同
同上面 , 参数本身不参与编译 , 如果查询条件一样(SQL语句就一样) , 而参数不一样 , 并不会影响要编译的SQL文本信息
第三 , 还有就是避免了第二种情况(and (@p_CustomerId is null or CustomerId = @p_CustomerId)
或者 and OrderNumber = ISNULL( @p_OrderNumber,OrderNumber))
这种写法 , 查询条件有就是有 , 没有就是没有 , 不会丢给SQL查询引擎一个模棱两个的结果 , 
避免了对索引的抑制行为 , 是一种比较好的处理查询条件的方式 。
缺点 , 1,对于这种方式 , 也有一点不好的地方 , 就是拼凑的字符串处理过程中 , 
调试具体的SQL语句的时候 , 参数是直接拼凑在SQL文本中的 , 不能直接执行 , 要手动将占位参数替换成具体的参数值
2,可能存在parameter sniff问题 , 但是对于parameter sniff问题 , 不是否定参数化SQL的重点 , 当然解决parameter sniff问题的办法还是有的 。
总结:
以上总结了三种在开发中比较常见的存储过程的写法 , 每种存储过程的写法可能在不同的公司都用应用 , 
是不是有人挑个最简单最快捷(第二种)写法 , 写完不是完事了 , 而是埋雷了 。
不是太熟悉SQL Server的同学可能会有点迷茫 , 有很多种写法 , 究竟要用哪种写法这些写法之间有什么区别 。
本文通过一个简单的示例 , 说了常见的几种写法之间的区别 , 每种方式存在的问题 , 以及孰优孰劣 , 请小伙伴们明辨 。
数据库大神请无视 , 谢谢 。
要用哪种写法这些写法之间有什么区别 。
本文通过一个简单的示例 , 说了常见的几种写法之间的区别 , 每种方式存在的问题 , 以及孰优孰劣 , 请小伙伴们明辨 。
数据库大神请无视 , 谢谢 。

【以一个简单的查询存储过程为例,简单说一下sql的几种写法】


推荐阅读