Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如果SQL表存在,则删除行_Mysql_Sql_Sql Server - Fatal编程技术网

Mysql 如果SQL表存在,则删除行

Mysql 如果SQL表存在,则删除行,mysql,sql,sql-server,Mysql,Sql,Sql Server,我有一个脚本,它使用DROP TABLE(删除表格)删除一堆表格,如果存在的话,这是可行的 这个脚本中还有一个delete命令,用于从另一个我不管理的表中删除一行。此表可能存在,也可能不存在。在尝试删除行之前,是否需要检查表是否存在 这需要适用于MYSQL和SQLServer 谢谢 亚历克斯在我看来,右边“相关”栏的第一项回答了你的问题 对于SQL Server:您可以使用: IF OBJECT_ID('tablename','U') IS NOT NULL 对于MySQL show tabl

我有一个脚本,它使用DROP TABLE(删除表格)删除一堆表格,如果存在的话,这是可行的

这个脚本中还有一个delete命令,用于从另一个我不管理的表中删除一行。此表可能存在,也可能不存在。在尝试删除行之前,是否需要检查表是否存在

这需要适用于MYSQL和SQLServer

谢谢
亚历克斯

在我看来,右边“相关”栏的第一项回答了你的问题

对于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 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

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

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

无论如何,Chris Gessler的答案完全符合您在SQL Server中的要求,但这里有一些气味

MySQL中可以使用的结构是

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

并检查结果

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

DELETE IGNORE FROM table WHERE id=1

您可以使用以下代码:

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 Server中都不起作用。您将需要两个单独的脚本。至少对于MySQL来说,这在不存在的表上根本不起作用,正如在提供的链接上所评论的那样。您的意思是:
如果OBJECT_ID(“[MyTable]”,'U')不是NULL,请从[MyTable]中删除
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