2009年4月14日 星期二

[SQL] SQL Server 中如何知道某個 table 是否存在

今天剛好碰到這樣的問題,以往我都是在既有的 tables 下對資料庫進行存取,不過因為系統中出現了暫存 table,所以我在每一次執行完成後就必須刪除(drop)該 table,也因為如此,我在 SQL 終究必須先判斷該 table 是否存在,如果存在就代表上次的作業沒有將此 table 刪除!
由於上述的原因,透過 Google 找到了相關的資源:

How do I determine if a table exists in a SQL Server database?


這樣的 SQL 撰寫起來蠻容易的:

IF EXISTS(
SELECT 1
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE='BASE TABLE'
AND TABLE_NAME='temp_table'
)
--如果存在在
DROP TABLE temp_table
ELSE
--如果不存在在

上述的 SQL 應該還蠻容易瞭解的,透過 IF...ELSE 敘述並且配合 EXISTS 語法就可以用來判斷存在性,整個 SQL 語法中的核心在於 SELECT 語句中,我們在 SQL Server 中是要透過 INFORMATION_SCHEMA 這個 system view 可以得知系統的中繼資料,透過 TABLES 就可以取得所有的 tables,然後我們在 WHERE 條件終將 TABLE_TYPE 設定為 BASE TABLE,這代表我們要查詢的是基本的 table,而不是 view;然後在告知 TABLE_NAME 為我們想要取得的 table 名稱,這樣就可以!至於為何是 SELECT 1 呢?這個數字 1 跟 C 語言中的 true 是類似的,因為在 SQL 中不存在 true 這樣的 boolean type,所以如果我們的 WHERE 條件成立,就會回傳 1 告知 EXISTS 為 true!

今天學到的東西,與大家分享之~

沒有留言: