首页 文章

SQL - 根据列值删除所有表中的行

提问于
浏览
1

我有一个包含数百个表的MySQL数据库 .

我需要根据名为“companyId”的公共列删除所有表中的记录 - 此列存在于数据库的所有表中 .

如何删除所有表中columnId = somenumber的所有记录?

先感谢您 !

伊万诺

@SocratesG我尝试了你的存储过程,但是我在下面创建了SP:

错误1064:您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在'@TableName VARCHAR(128)附近使用正确的语法;

DECLARE @MyColumn VARCHAR(128);

在第4行设置@MyColumn ='compan'

SQL语句:

CREATE PROCEDURE deletePortalInstance ()

开始

DECLARE @TableName VARCHAR(128);

DECLARE @MyColumn VARCHAR(128);

SET @MyColumn ='companyId'

宣布MyCursor CURSOR

(选择OBJECT_NAME(c.id)作为ObjectName

FROM dbo.syscolumns c

          WHERE 

            OBJECTPROPERTY(c.id,'ISTABLE') = 1 --Search for tables only

            AND c.name = @MyColumn)

打开MyCursor

FETCH NEXT从MyCursor进入@TableName

WHILE @@ FETCH_STATUS = 0

开始

EXEC

        (

             'DELETE ' + @MyColumn

            +' FROM ' + @TableName  

            +' WHERE ' + @MyColumn + ' = 906454'

        )

FETCH NEXT FROM MyCursor into @TableName

结束

关闭MyCursor

DEALLOCATE MyCursor

结束

错误1064:您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在'@TableName VARCHAR(128)附近使用正确的语法;

DECLARE @MyColumn VARCHAR(128);

在第4行设置@MyColumn ='compan'

SQL语句:

CREATE PROCEDURE deletePortalInstance ()

开始

DECLARE @TableName VARCHAR(128);

DECLARE @MyColumn VARCHAR(128);

SET @MyColumn ='companyId'

宣布MyCursor CURSOR

(选择OBJECT_NAME(c.id)作为ObjectName

FROM dbo.syscolumns c

          WHERE 

            OBJECTPROPERTY(c.id,'ISTABLE') = 1 --Search for tables only

            AND c.name = @MyColumn)

打开MyCursor

FETCH NEXT从MyCursor进入@TableName

WHILE @@ FETCH_STATUS = 0

开始

EXEC

        (

             'DELETE ' + @MyColumn

            +' FROM ' + @TableName  

            +' WHERE ' + @MyColumn + ' = 906454'

        )

FETCH NEXT FROM MyCursor into @TableName

结束

关闭MyCursor

DEALLOCATE MyCursor

结束

4 回答

  • 0
    DELETE FROM table_Name where columnn_name = value ;
    

    DELETE fom students where rll_num = 5 ;
    
  • 0
    DELETE FROM <tblName> where columnId = <Your Column Id val>
    

    但我认为您使用外键使用参照完整性约束并使用 On Delete Cascade

    根据您的新信息,

    Update :

    DELETE t1, t2
          FROM <table1> t1
          JOIN <table2> t2 ON t1.columnId = t2.columnId 
         WHERE t1.columnId  = <Your Column Value>
    

    说明:

    • 这里我们要删除多个表中的记录,所以我们使用 DELETE FROM table1,table2

    • 由于所有表中都有一个具有相同名称的列,因此我们生成了 JOIN ,因此可以一次删除100个表中的所有行 .

    3.最后我们有 WHERE t1.columnId = 1 之类的条件,表示在table1中,检查columnId = 1,所以当我们加入时,它选择100表中的所有这些行,然后删除它 .

  • -1

    你可以试试这个

    DECLARE @TableName VARCHAR(128);
    DECLARE @MyColumn VARCHAR(128);
    SET @MyColumn = 'MyColumnName'
    DECLARE MyCursor CURSOR FOR  
    (SELECT OBJECT_NAME(c.id) as ObjectName
                  FROM dbo.syscolumns c
                  WHERE 
                    OBJECTPROPERTY(c.id,'ISTABLE') = 1 --Search for tables only
                    AND c.name = @MyColumn)
    
    OPEN MyCursor 
    FETCH NEXT FROM MyCursor into @TableName
    WHILE @@FETCH_STATUS = 0  
    BEGIN
        EXEC
                (
                     'DELETE ' + @MyColumn
                    +' FROM ' + @TableName  
                    +' WHERE ' + @MyColumn + ' <= 1000'
                )
        FETCH NEXT FROM MyCursor into @TableName
    END
    CLOSE MyCursor   
    DEALLOCATE MyCursor
    
  • -1
    DELETE FROM companyId where columnId = 1
    

相关问题