我最近在我工作的地方遇到了一个有趣的实践。我注意到一些开发人员使用以下方式来初始化 sql server 临时表:
if object_id('tempdb..#TempTbl','u') is not null
drop table #TempTbl
Run Code Online (Sandbox Code Playgroud)
其他队友将使用:
if object_id('tempdb..#TempTbl') is not null
drop table #TempTbl
Run Code Online (Sandbox Code Playgroud)
我的问题:
我已经尝试研究 msdn 以获取更多信息,但似乎这两种说法都没有真正的区别。它们产生相同的结果,但我对性能或其他相关因素很好奇。
2 次初始化之间是否存在性能差异?
不。没有性能差异。如果您使用set statistics time, io ON并检查没有涉及 CPU 或 IO
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms.
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms.
Run Code Online (Sandbox Code Playgroud)
第一个语句中的 ,'u' 段代码有什么作用?
OBJECT_ID ('[database_name.[schema_name].|schema_name.]
object_name'[,' object_type '])
所述u指定其用户对象。它被称为用户定义表sys.objects
我认为定义你在做什么是很好的编码习惯。所以在第一个例子中,开发人员说if #TempTbl table exists then drop it。我见过糟糕的命名,人们将视图命名为表,不要使用模式前缀和其他坏习惯!
在 SQL Server 2016 中,您将看到一个新的语法 ..
DROP TABLE IF EXISTS
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
331 次 |
| 最近记录: |