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

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

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

这需要适用于 MYSQL 和 SQLServer

谢谢 亚历克斯

【问题讨论】:

  • DROP TABLE IF EXISTS 在 SQL Server 中无论如何都不起作用。您将需要 2 个单独的脚本。

标签: mysql sql sql-server


【解决方案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
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2020-09-26
                • 1970-01-01
                • 2020-09-23
                • 1970-01-01
                • 2013-01-09
                • 1970-01-01
                相关资源
                最近更新 更多