檢查SQL Server中是否存在表

我但願這是關於如何使用SQL語句檢查SQL Server 2000/2005中是否存在表的最終討論。 數據庫

當您用Google搜索答案時,會獲得不少不一樣的答案。 有官方/向後和向前兼容的方式嗎? 架構

這是兩種可能的方法。 兩種方法中的哪種是標準/最佳方法? 編輯器

第一種方式: spa

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;

第二種方式: code

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

MySQL提供的簡單 io

SHOW TABLES LIKE '%tablename%';

聲明。 我正在尋找相似的東西。 table


#1樓

考慮在一個數據庫中您有一個表t1。 您想在其餘數據庫上運行腳本,例如-若是t1存在,則不執行其餘任何操做來建立t1。 爲此,請打開Visual Studio,而後執行如下操做: object

右鍵單擊t1,而後單擊「腳本表」,而後單擊「 DROP」和「建立到」,而後單擊「新建查詢編輯器」。 搜索

您將找到所需的查詢。 可是在執行該腳本以前,不要忘了在查詢中註釋掉drop語句,由於若是已有一個,則不想建立新的語句。 方法

謝謝


#2樓

若是您須要在其餘數據庫上工做:

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

#3樓

使用信息架構是SQL標準的實現方式,所以,支持它的全部數據庫都應使用它。


#4樓

只要我記得咱們一直使用OBJECT_ID樣式

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

#5樓

對於此類查詢,最好始終使用INFORMATION_SCHEMA視圖。 這些視圖(大多數狀況下)是跨許多不一樣數據庫的標準視圖,而且不多因版本而異。

要檢查表是否存在,請使用:

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