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

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


当前回答

还有一个选项可以检查表是否跨数据库存在

IF EXISTS(SELECT 1 FROM [change-to-your-database].SYS.TABLES WHERE NAME = 'change-to-your-table-name')
BEGIN
    -- do whatever you want
END

其他回答

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

在我的记忆中,我们总是使用OBJECT_ID样式

IF OBJECT_ID('*objectName*', 'U') IS NOT NULL 
IF OBJECT_ID('mytablename') IS NOT NULL 

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

检查表是否存在:

IF (EXISTS (SELECT * 
                 FROM INFORMATION_SCHEMA.TABLES 
                 WHERE TABLE_SCHEMA = 'TheSchema' 
                 AND  TABLE_NAME = 'TheTable'))
BEGIN
    --Do Stuff
END

还要注意,如果出于任何原因你需要检查临时表,你可以这样做:

if OBJECT_ID('tempdb..#test') is not null
 --- temp table exists