日期:2014-05-18  浏览次数:20580 次

下面两句判断一个表是否存在的语句哪个更好些呀,道理何在呢?
下面两句判断一个表是否存在的语句哪个更好些呀,道理何在呢?
----------------------
我测试过了,以下两条语句都可以完成相同的功能,都是判断一个表是否已经存在?
但是我不知哪条语句更好些.哪种用法更规范?
SQL code

--第一种方法
if exists (select * from dbo.sysobjects where name='tablename' and xtype='u')
--第二种方法
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tablename]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)



其中第一种写法比较简单,可读性好,是论坛上网友经常贴出来的写法.
第二种写法是生成脚本时,sqlserver2000自动生成的语句的写法.
第二种比第一种复杂,可读性差,可是为何自带的语法是第二种而不是第一种的写法呢?道理何在呢?
是不是第一种写法并不完美呀.第一种写法在哪种情况下不能使用呢?


------解决方案--------------------
你用MS的产品,那他的东西就规范

通过封装函数可以让更多的人不要去理解系统表的字段含义
------解决方案--------------------

谢谢指教,我想问的是,如果用第一种方法,会有问题吗?
--
没问题



从效率上来讲,一定是第一种方法效率更高呀,是不是呀?
----

应该当然第一个,因为第二个用函数了

------解决方案--------------------
第二种
返回当前数据库中对象的有关信息,
可按IsTable/IsUserTable/IsSystemTable
--这是SQL通用的格式写法
------解决方案--------------------
效率没什么区别
你可以在“显示估计的执行计划”里对比下