如果表存在则删除行 SQL

Posted

技术标签:

【中文标题】如果表存在则删除行 SQL【英文标题】:Delete row if table exists SQL 【发布时间】:2012-03-21 11:26:12 【问题描述】:

我有一个脚本,它使用 DROP TABLE IF EXISTS 删除大量表,这很有效。

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

这需要适用于 mysql 和 SQLServer

谢谢 亚历克斯

【问题讨论】:

DROP TABLE IF EXISTS 在 SQL Server 中无论如何都不起作用。您将需要 2 个单独的脚本。 【参考方案1】:

要签入 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]';

【讨论】:

【参考方案2】:

这个删除行,如果不能,不抱怨。

DELETE IGNORE FROM table WHERE id=1

source here.

【讨论】:

至少对于 MySQL 来说,这实际上在一个不存在的表上根本不起作用,正如所提供的链接所评论的那样。【参考方案3】:

对于 SQL Server:您可以使用:

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

【讨论】:

你是不是这个意思:IF OBJECT_ID('[MyTable]', 'U') IS NOT NULL delete from [MyTable];【参考方案4】:

我认为您不会在 SQL Server 和我的 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

【讨论】:

【参考方案5】:
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TABLE_NAME]') AND type in (N'U'))

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

对于 MySQL

show tables like "test1";

对于 SQL Server

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

【讨论】:

【参考方案8】:

您想问自己的一个问题(就数据库设计而言):您为什么要尝试从您不确定是否存在的表中删除行?如果它没有,但您希望它有,您是不是宁愿创建表也不愿删除它?

无论如何,Chris Gesslers 的回答完全符合您在 SQL Server 中的要求,但这里有些异味。

你可以在 MySQL 中使用的构造是

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

并检查结果

【讨论】:

【参考方案9】:

你可以使用下面的代码:

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

【讨论】:

以上是关于如果表存在则删除行 SQL的主要内容,如果未能解决你的问题,请参考以下文章

如果存在这个表,则删除这个表的sql

如果所有记录都存在于 sql server 的另一个表中,则返回行列表

VBA脚本检查MS ACCESS上是不是存在表,如果存在则删除

如果每个工作表中的字符串匹配,则修复删除行

oracle创建表之前判断表是不是存在,如果存在则删除已有表

如果存在,则 T-SQL 删除类型 [重复]