2015-01-29 3 views
1

나는 수백 개의 테이블을 가진 MySQL 데이터베이스를 가지고 있습니다.SQL - 열 값을 기반으로 모든 테이블의 행을 삭제하십시오.

'companyId'라는 공통 열에 기반하여 모든 테이블의 레코드를 삭제해야합니다.이 열은 데이터베이스의 모든 테이블에 있습니다.

columnId = somenumber 인 모든 테이블에서 모든 레코드를 어떻게 삭제할 수 있습니까?

미리 감사드립니다.

이바노 C.

@SocratesG 나는 당신의 저장 프로 시저를 시도했지만 나는 SP 생성 아래를 얻을 :

ERROR 1064 : 당신은 당신의 SQL 구문에 오류가 있습니다; '@TableName VARCHAR (128); 근처에서 사용할 올바른 구문에 대해서는 해당 MySQL 서버 버전에 해당하는 설명서를 확인하십시오.

DECLARE @MyColumn VARCHAR (128);

SET @MyColumn = '회사의'선에서 4

SQL 문 :

프로 deletePortalInstance을 (만들기)

DECLARE의 @tablename VARCHAR (128) BEGIN;

DECLARE @MyColumn VARCHAR (128);

SET의 @MyColumn는 =

(FOR '회사 ID'

DECLARE의 MyCursor 커서 OBJECT_NAME (c를 선택한다.

  FROM dbo.syscolumns c 

      WHERE 

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

      AND c.name = @MyColumn) 

이 OPEN MyCursor가

가 @tablename에 MyCursor FROM NEXT FETCH ObjectName처럼 ID)

WHILE @@ FETCH_STATUS 0 =

BEGIN

EXEC 

     (

      'DELETE ' + @MyColumn 

      +' FROM ' + @TableName 

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

     ) 

FETCH NEXT FROM MyCursor into @TableName 

END

CLOSE MyCursor

DEALLOCATE MyCursor

END

ERROR 1064 : 당신은 당신의 SQL 구문에 오류가 있습니다; '@TableName VARCHAR (128); 근처에서 사용할 올바른 구문에 대해서는 해당 MySQL 서버 버전에 해당하는 설명서를 확인하십시오.

DECLARE @MyColumn VARCHAR (128);

SET @MyColumn = '회사의'선에서 4

SQL 문 :

프로 deletePortalInstance을 (만들기)

DECLARE의 @tablename VARCHAR (128) BEGIN;

DECLARE @MyColumn VARCHAR (128);

SET의 @MyColumn는 =

(FOR '회사 ID'

DECLARE의 MyCursor 커서 OBJECT_NAME (c를 선택한다.

  FROM dbo.syscolumns c 

      WHERE 

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

      AND c.name = @MyColumn) 

이 OPEN MyCursor가

가 @tablename에 MyCursor FROM NEXT FETCH ObjectName처럼 ID)

WHILE @@ FETCH_STATUS 0 =

BEGIN

EXEC 

     (

      'DELETE ' + @MyColumn 

      +' FROM ' + @TableName 

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

     ) 

FETCH NEXT FROM MyCursor into @TableName 

END

CLOSE MyCursor

DEALLOCATE MyCursor

END

+2

설정 테이블을 시도 할 수 있습니다! – jarlh

답변

0
DELETE FROM companyId where columnId = 1 
+0

나는 HUNDREDS 테이블이있는 MySQL 데이터베이스를 가지고 있기 때문에 BATCH 프로세스가 아닌 일반적인 테이블 이름이 'companyId'인 모든 테이블에서 테이블을 삭제해야합니다. – icarrara

0
DELETE FROM <tblName> where columnId = <Your Column Id val> 

는하지만 난 당신이 외국 키를 사용하여 참조 무결성 제약 조건을 사용하고 새로운 당으로 삭제 캐스케이드

을 사용하여 생각 정보,

업데이트 :

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

설명 : 우리는 여러 테이블에서 레코드를 삭제하는, 그래서 당신은 모두 같은 이름을 가진 하나 개의 컬럼을 가지고로서 우리는 등 DELETE FROM table1,table2

  • 을 사용하여 다음

    1. 테이블, 우리는 JOIN을 만들었으므로 100 개의 테이블에있는 모든 행을 한꺼번에 삭제할 수 있습니다.

    3.At 마지막 우리가 결합함에 따라 100 표에서 이러한 모든 행을 선택하므로, 해당 columnid = 1 확인 WHERE t1.columnId = 1 같은 조건이 표 수단이 다음이를 삭제한다.

  • +0

    일부 HUNDREDS 테이블이있는 MySQL 데이터베이스가 있으므로 필요합니다. BATCH 프로세스가있는 'companyId'라는 일반 열을 기반으로 모든 테이블의 레코드를 삭제하려면 – icarrara

    +0

    'companyId '라는 공통 열이 테이블에 있습니까? 이 열 이름이 100 개의 테이블에서 동일합니까? –

    +0

    예, HUNDREDS 테이블이 있고 모든 테이블에 'companyId'라는 열이 있습니다 – icarrara

    0
    DELETE FROM table_Name where columnn_name = value ; 
    

    예를

    DELETE fom students where rll_num = 5 ; 
    
    +0

    확인,하지만은 '평균 제발 <= 1000 '? – icarrara

    0

    당신은 적절한 외부 키와이

    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 
    
    +0

    하여 일괄 처리하지 테이블 '회사 ID'라는 공통의 열을 기반으로 모든 테이블에서 레코드를 삭제하기 때문에 II 필요 MySQL 데이터베이스를 – icarrara

    +0

    거기에 자신 만의 가치를 사용할 수 있습니다. – SocratesG

    +0

    삭제할 레코드와 일치하는 값을 의미합니까? – icarrara

    관련 문제