如果表存在则删除行 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 server 的另一个表中,则返回行列表
VBA脚本检查MS ACCESS上是不是存在表,如果存在则删除