我希望这是关于如何使用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%'; 

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


当前回答

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

下面是解决方案:

SELECT COUNT(*) FROM <yourTableNameHere>

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

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

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

其他回答

IF EXISTS (
SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE 
TABLE_CATALOG = 'Database Name' and
TABLE_NAME = 'Table Name' and 
TABLE_SCHEMA = 'Schema Name') -- Database and Schema name in where statement can be deleted

BEGIN
--TABLE EXISTS
END

ELSE BEGIN
--TABLE DOES NOT EXISTS
END

使用信息模式是SQL标准的方式,所以支持它的所有数据库都应该使用它。请参见答案中的方法1。

IF EXISTS 
(
    SELECT  * 

    FROM    INFORMATION_SCHEMA.TABLES 

    WHERE   TABLE_SCHEMA = 'PutSchemaHere'     
            AND  
            TABLE_NAME   = 'PutTableNameHere'
)

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

下面是解决方案:

SELECT COUNT(*) FROM <yourTableNameHere>

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

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

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

如果你需要使用不同的数据库:

DECLARE @Catalog VARCHAR(255)
SET @Catalog = 'MyDatabase'

DECLARE @Schema VARCHAR(255)
SET @Schema = 'dbo'

DECLARE @Table VARCHAR(255)
SET @Table = 'MyTable'

IF (EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES   
    WHERE TABLE_CATALOG = @Catalog 
      AND TABLE_SCHEMA = @Schema 
      AND TABLE_NAME = @Table))
BEGIN
   --do stuff
END