删除行,如果表存在SQL
问题描述:
我有一个脚本,使用DROP TABLE IF EXISTS删除一个表的负载,这个工程。删除行,如果表存在SQL
此脚本中还有一个删除行,用于从另一个表中删除我不管理的行。这个表可能存在也可能不存在。在尝试删除一行之前,有没有任何检查表存在?
这需要对MySQL和SQLServer工作
感谢 亚历
答
要检查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
答
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'
和检查结果
'DROP TABLE IF EXISTS'没有在SQL Server的工作反正。您将需要2个独立的脚本。 – 2012-03-21 11:28:46