如果表存在SQL,则删除行

时间:2012-03-21 11:26:13

标签: mysql sql sql-server

我有一个使用DROP TABLE IF EXISTS删除大量表的脚本,这可行。

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

这需要适用于MYSQL和SQLServer

感谢 亚历

9 个答案:

答案 0 :(得分: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]';

答案 1 :(得分:6)

这一行会删除该行,如果不能,则不会抱怨。

DELETE IGNORE FROM table WHERE id=1

source here.

答案 2 :(得分:3)

对于SQL Server:您可以使用:

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

答案 3 :(得分:3)

我不认为你会在SQL服务器和我的SQL之间找到一个通用的语法。我的意思是,您可以使用以下内容检查SQL Server上的表是否存在:

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

答案 4 :(得分:2)

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

答案 5 :(得分:1)

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

答案 6 :(得分:1)

对于MySQL

show tables like "test1";

对于SQL Server

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

答案 7 :(得分:1)

您想问自己的问题(在数据库设计方面):您为什么要尝试从不确定存在的表中删除行?如果它没有,但你期望它,你宁愿创建表而不是删除它吗?

无论如何,Chris Gesslers的答案确切地说明了你在SQL Server中提出的要求,但这里有一些气味。

您可以使用的MySQL构造

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

并检查结果

答案 8 :(得分:0)

您可以使用以下代码:

DECLARE @TABLENAME VARCHAR(20)='TableName';

IF (OBJECT_ID(@TABLENAME) IS NOT NULL )
BEGIN
   execute(N'TRUNCATE TABLE ' + @TABLENAME + '' );
END
ELSE
BEGIN 
  PRINT 'Table NOT Exists'
 END