我希望这是关于如何使用SQL语句检查SQL Server 2000/2005中是否存在表的最终讨论。

这里有两种可能的方法。哪一种是做这件事的标准/最佳方式?

第一个方法:

IF EXISTS (SELECT 1 
           FROM INFORMATION_SCHEMA.TABLES 
           WHERE TABLE_TYPE='BASE TABLE' 
           AND TABLE_NAME='mytablename') 
   SELECT 1 AS res ELSE SELECT 0 AS res;

第二种方式:

IF OBJECT_ID (N'mytablename', N'U') IS NOT NULL 
   SELECT 1 AS res ELSE SELECT 0 AS res;

MySQL提供简单的

SHOW TABLES LIKE '%tablename%'; 

声明。我在找类似的东西。


当前回答

对于那些还没有找到解决方案的人来说,有一些重要的事情需要知道: SQL server = MYSQL。 如果你想用MYSQL来做,这很简单

    $sql = "SELECT 1 FROM `db_name`.`table_name` LIMIT 1;";
    $result = mysql_query($sql);
    if( $result == false )
        echo "table DOES NOT EXIST";
    else
        echo "table exists";

把这个贴在这里,因为它是谷歌的热门。

其他回答

我有一些问题,无论是从INFORMATIONAL_SCHEME和OBJECT_ID选择。我不知道是不是ODBC驱动程序的问题。来自SQL管理工作室的查询都没问题。

下面是解决方案:

SELECT COUNT(*) FROM <yourTableNameHere>

因此,如果查询失败,则数据库中可能没有这样的表(或者您没有对它的访问权限)。

检查是通过比较处理ODBC驱动程序的SQL执行器返回的值(在我的情况下为整数)来完成的。

if (sqlexec(conectionHandle, 'SELECT COUNT(*) FROM myTable') == -1) {
  // myTable doesn't exist..
}

对于这样的查询,最好使用INFORMATION_SCHEMA视图。这些视图(大多数)是跨许多不同数据库的标准视图,很少在不同版本之间更改。

检查表是否存在:

IF (EXISTS (SELECT * 
                 FROM INFORMATION_SCHEMA.TABLES 
                 WHERE TABLE_SCHEMA = 'TheSchema' 
                 AND  TABLE_NAME = 'TheTable'))
BEGIN
    --Do Stuff
END
IF OBJECT_ID('mytablename') IS NOT NULL 
select name from SysObjects where xType='U' and name like '%xxx%' order by name

你可以用这个:

     IF OBJECT_ID (N'dbo.T', N'U') IS NOT NULL 
        BEGIN 
            print 'deleted table';
            drop table t 
        END
     else 
        begin 
            print 'table not found' 
        end

 Create table t (id int identity(1,1) not null, name varchar(30) not null, lastname varchar(25) null)
 insert into t( name, lastname) values('john','doe');
 insert into t( name, lastname) values('rose',NULL);

 Select * from t
1   john    doe
2   rose    NULL

 -- clean
 drop table t