我有一个脚本,使用DROP TABLE IF EXISTS删除一堆表,这是有效的。
此脚本中还有一个删除操作,用于删除另一个我不管理的表中的行。 此表可能存在也可能不存在。在尝试删除行之前是否有任何检查表存在?
这需要适用于MYSQL和SQLServer
谢谢
亚历克斯
DROP TABLE IF EXISTS无论如何都无法在SQL Server中运行。 您将需要2个单独的脚本。
要检入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]';
这个删除该行,如果不能,则不会抱怨。
来源于此。
至少在MySQL中,这根本不适用于不存在的表,正如所提供的链接上所评论的那样。
我不认为你会在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
对于SQL Server:您可以使用:
IF OBJECT_ID('tablename','U') IS NOT NULL
你的意思是:IF OBJECT_ID([MyTable], U) IS NOT NULL delete from [MyTable];
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TABLE_NAME]') AND type in (N'U'))
您想问自己的一个问题(在数据库设计方面):您为什么要尝试从不确定存在的表中删除行?如果它没有,但你期望它,你宁愿创建表而不是删除它吗?
无论如何,Chris Gesslers的回答完全符合您在SQL Server中的要求,但这里有一些气味。
您可以使用的MySQL构造
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'databasename'
AND table_name = 'tablename'
并检查结果
对于MySQL
对于SQL Server
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'testSchema' AND TABLE_NAME = 'test1'
在我看来,右侧"相关"列中的第一项回答了您的问题....检查SQL Server中是否存在表
您可以使用以下代码:
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