删除行,如果表存在SQL

问题描述:

我有一个脚本,使用DROP TABLE IF EXISTS删除一个表的负载,这个工程。删除行,如果表存在SQL

此脚本中还有一个删除行,用于从另一个表中删除我不管理的行。这个表可能存在也可能不存在。在尝试删除一行之前,有没有任何检查表存在?

这需要对MySQL和SQLServer工作

感谢 亚历

+0

'DROP TABLE IF EXISTS'没有在SQL Server的工作反正。您将需要2个独立的脚本。 – 2012-03-21 11:28:46

要检查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

在我看来,右边的第一项右侧的“相关”一栏回答您的问题.... Check if table exists in SQL Server

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

对于SQL Server:您可以使用:

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

对于MySQL

show tables like "test1"; 

对于SQL Server

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

我不认为你会发现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 

你想要一个问题o问自己(根据数据库设计):为什么你想从表中删除你不确定存在的行?如果它不,但你期望它,你不是创建表而不是删除它吗?

无论如何,Chris Gesslers的回答完全正是你在SQL Server中所要求的,但这里有一些异味。

在MySQL的构建物可以使用是

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

和检查结果

这其中删除了该行,如果它不能没有抱怨。

DELETE IGNORE FROM table WHERE id=1 

source here.