2012-03-21 41 views
10

我有一個腳本,使用DROP TABLE IF EXISTS刪除一個表的負載,這個工程。刪除行,如果表存在SQL

此腳本中還有一個刪除行,用於從另一個表中刪除我不管理的行。這個表可能存在也可能不存在。在嘗試刪除一行之前,有沒有任何檢查表存在?

這需要對MySQL和SQLServer工作

感謝 亞歷

+0

'DROP TABLE IF EXISTS'沒有在SQL Server的工作反正。您將需要2個獨立的腳本。 – 2012-03-21 11:28:46

回答

11

要檢查SQL SERVER,

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

要檢查在MySQL:

您簡單地計算:

SELECT COUNT(*) 
FROM information_schema.tables 
WHERE table_schema = '[database name]' 
AND table_name = '[table name]'; 
+0

回覆主持人回答。 – 2012-03-21 15:13:50

2
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TABLE_NAME]') AND type in (N'U')) 
2

對於SQL Server:您可以使用:

IF OBJECT_ID('tablename','U') IS NOT NULL 
1

對於MySQL

show tables like "test1"; 

對於SQL Server

SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'testSchema' AND  TABLE_NAME = 'test1' 
2

我不認爲你會發現SQL服務器和我的SQL之間的共同的語法。我的意思是,你可以檢查SQL Server上的表exsits使用類似:

if exists(select * from sys.objects where name like 'table_name') 

然而MySQL將有自己的目錄。

除非你寫一個腳本,如:

if (sql_server) then 
    if exists(select * from sys.objects where name like 'table_name') 
else --mySQl 
    --execute the mysql script 
1

你想要一個問題o問自己(根據數據庫設計):爲什麼你想從表中刪除你不確定存在的行?如果它不,但你期望它,你不是創建表而不是刪除它嗎?

無論如何,Chris Gesslers的回答完全正是你在SQL Server中所要求的,但這裏有一些異味。

在MySQL的構建物可以使用是

SELECT table_name 
FROM information_schema.tables 
WHERE table_schema = 'databasename' 
AND table_name = 'tablename' 

和檢查結果

6

這其中刪除了該行,如果它不能沒有抱怨。

DELETE IGNORE FROM table WHERE id=1 

source here.