【转】判断一个表是否存在

     在SQL中判断一个表是否存在

    

            <%sql="if exists (select * from sysobjects where id = object_id(N'[dbo].[phone]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[phone]" con.execute(sql)  %>            

            如果表phone存在则删除phone表, 其中phone是表名,con是connection对像              

            两个假设:              

            1、已知数据库中所有的表默认的 Owner,如dbo(可以省略而取默认值)              

            2、已知当前用户有权限访问 systemobjects 系统表

              SQL 语句:              

              select * from sysobjects where id = object_id(N'[dbo].[table_name]') and OBJECTPROPERTY(id, N'IsUserTable') = 1               

              '注:table_name 为实际要检查的表名

              解释:

               如果返回记录数为0则表明没有这个表,否则表示已经存在。                             

              systemobjects 表中保存着数据库的所有表、视图和存贮过程等的信息,检索这个系统表即可得到是否存在。此方法还适用于检查视图和存贮过程,相应的标志要改为IsView(视图/查询)或者IsProcedure(存贮过程),table_name 处为 view_name 或 procedure_name。

             评价:              

               这种方法较检查错误代码确定表是否存在的方法相对较麻烦一些,但功能更强大,不仅可以检查表还可以检查视图/查询、存贮过程等,用途比较广泛。后者简便易行,不需要任何先觉条件,但应用范围比较有限。个人认为,如果力求规范的编程,推荐使用第一种也就是搜索系统表的   方法判断对象(表、视图等)是否存在?如果是仅仅判断表名是否存在的,我觉得用下面的方法更简单(错误侦测法). On Error Resume Next ERR.CLEAR STRSQL="SELECT * FROM " & 你判断的表名 P_Cnn.Execute StrSql IF ERR.NUMBER=0 THEN '存在 ELSE '不存在. END IF

 

posted @ 2012-06-04 13:51  chend926  阅读(193)  评论(0编辑  收藏  举报