복붙노트

[SQL] 하나의 MySQL의 문에서 자르기 여러 테이블

SQL

하나의 MySQL의 문에서 자르기 여러 테이블

하나 개의 SQL 문을 여러 테이블로 절단 할 가능성이 있습니까?

이 같이 :

 truncate table #OBJ_AvailabilityTraining, #OBJ_AvailabilityHoliday, #Dates_temp;

문안 인사

해결법

  1. ==============================

    1.아니, 당신은 단지 TRUNCATE 명령으로 하나의 테이블을자를 수 있습니다. 여러 테이블을 절단하기 위해 한 번에 각을 절단하는 테이블 이름을 통해 T-SQL과 반복 처리를 사용할 수 있습니다.

    아니, 당신은 단지 TRUNCATE 명령으로 하나의 테이블을자를 수 있습니다. 여러 테이블을 절단하기 위해 한 번에 각을 절단하는 테이블 이름을 통해 T-SQL과 반복 처리를 사용할 수 있습니다.

    DECLARE @delimiter CHAR(1),
            @tableList VARCHAR(MAX),
            @tableName VARCHAR(20),
            @currLen INT
    
    SET @delimiter = ','
    
    SET @tableList = 'table1,table2,table3'
    
    WHILE LEN(@tableList) > 0
    BEGIN
        SELECT @currLen = 
        (
            CASE charindex( @delimiter, @tableList ) 
                WHEN 0 THEN len( @tableList  ) 
                ELSE ( charindex( @delimiter, @tableList  ) -1 )
            END
        ) 
    
        SELECT @tableName = SUBSTRING (@tableList,1,@currLen )
    
        TRUNCATE TABLE @tableName
    
        SELECT tableList = 
        (
            CASE ( len( @tableList ) - @currLen  ) 
                WHEN 0 THEN '' 
                ELSE right( @tableList, len( @tableList ) - @currLen  - 1 ) 
            END
        ) 
    END
    

    당신은 당신의 테이블 이름의 쉼표 @tableList 변수에 분리 모두를 가질 수 있습니다 그들이 접두어 경우 네는 서로 다른 스키마에서 여러 테이블을자를 수 있습니다.

  2. ==============================

    2.당신은 너무처럼 sp_MSforeachtable 저장 프로 시저를 사용할 수 있습니다 :

    당신은 너무처럼 sp_MSforeachtable 저장 프로 시저를 사용할 수 있습니다 :

    USE MyDatabase
    EXEC sp_MSforeachtable 'TRUNCATE TABLE ?'
    

    또는 당신은 SQL 문을 만들 수 있습니다

    SELECT concat('TRUNCATE TABLE ', TABLE_NAME, ';')
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_NAME LIKE 'TableName%'
    

    및 SQL 문 이상이 실행

  3. ==============================

    3.호 그러나 대안이있다 :

    호 그러나 대안이있다 :

    SELECT 'TRUNCATE TABLE '+TABLE_NAME+ ';'
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_NAME LIKE 'your-table-name%'
    

    예 :

    SELECT 'TRUNCATE TABLE '+TABLE_NAME+ ';'
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_NAME LIKE 'TBL_ORDERS_20%'
    

    지금 당신은 선택 쿼리 위 대한 결과 아래에 있습니다

    TRUNCATE TABLE TBL_ORDERS_2001
    TRUNCATE TABLE TBL_ORDERS_2002
    TRUNCATE TABLE TBL_ORDERS_2003
    TRUNCATE TABLE TBL_ORDERS_2004
    

    또는 당신은 같은 것을 사용할 수 있습니다

    select 'Truncate table ' + TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_NAME in ('Table1', 'Table2')
    

    링크 1

    링크 2

    최신 정보:

    귀하의 질문에 예 쿼리 테이블을 보면

    잘라 내기 테이블 #OBJ_AvailabilityTraining, #OBJ_AvailabilityHoliday, #Dates_temp

    난 당신이 모든 임시 테이블을 잘라 내기 할 생각합니다.

    이 같은 간단한 쿼리를 수행 할 수 있습니다

    select 'Truncate table ' + TABLE_NAME from tempdb.INFORMATION_SCHEMA.TABLES
    
  4. ==============================

    4.보너스 예는 문자열로 시작하는 하나의 데이터베이스에있는 모든 테이블을 절단 ...

    보너스 예는 문자열로 시작하는 하나의 데이터베이스에있는 모든 테이블을 절단 ...

    SELECT CONCAT('TRUNCATE TABLE ', TABLE_NAME, ';')
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_SCHEMA = 'my_database_name'
      AND TABLE_NAME LIKE 'cache_%';
    
  5. ==============================

    5.그냥 쉽게 MySQL의 문을 입력 :

    그냥 쉽게 MySQL의 문을 입력 :

    TRUNCATE TABLE yourtablename1;
    TRUNCATE TABLE yourtablename2;
    TRUNCATE TABLE yourtablename3;
    

    ... 등등.

    당신과 함께 yourtablename을 변경합니다.

    세미콜론을 잊지 마세요;

  6. ==============================

    6.나는 그것이 매우 유사하지만, 잘라 내기 부분입니다, 나는이에 의해 코드를 변경할 수 있도록이 잘라 내기 문에 나에게 오류가 발생하기 때문에 IndoKnight에 의해 전송 된 코드를 변경해야했다 :

    나는 그것이 매우 유사하지만, 잘라 내기 부분입니다, 나는이에 의해 코드를 변경할 수 있도록이 잘라 내기 문에 나에게 오류가 발생하기 때문에 IndoKnight에 의해 전송 된 코드를 변경해야했다 :

    DECLARE @delimiter CHAR(1),
            @tableList VARCHAR(MAX),
            @tableName VARCHAR(100),
            @currLen INT,
            @truncateStatement VARCHAR(200)
    
    SET @delimiter = ','
    
    SELECT @tableList = COALESCE(@tableList + ', ','') + CAST (TABLE_NAME AS varchar(100))
        FROM INFORMATION_SCHEMA.TABLES
        WHERE TABLE_SCHEMA = 'xxx'
    
        WHILE LEN(@tableList) > 0
        BEGIN
            SELECT @currLen = 
            (
                CASE charindex( @delimiter, @tableList ) 
                    WHEN 0 THEN len( @tableList  ) 
                    ELSE ( charindex( @delimiter, @tableList  ) -1 )
                END
            ) 
    
            SELECT @tableName = TRIM(SUBSTRING (@tableList,1,@currLen ))
    
            SET @truncateStatement = 'TRUNCATE TABLE ' + QUOTENAME('xxx') + '.' + QUOTENAME(@tableName)
            EXEC (@truncateStatement)
    
            SELECT @tableList = 
            (
                CASE ( len( @tableList ) - @currLen  ) 
                    WHEN 0 THEN '' 
                    ELSE right( @tableList, len( @tableList ) - @currLen  - 1 ) 
                END
            ) 
        END
    

    트릭은 테이블 이름과 스키마에 대괄호를 넣어 QUOTENAME을 사용하고 있습니다. 어쩌면 IndoKnight 솔루션은 데이터베이스의 최신 버전에서 더 이상 작동하지 않습니다. 나는 그것이 도움이되기를 바랍니다.

  7. from https://stackoverflow.com/questions/15926826/truncate-multiple-tables-in-one-mysql-statement by cc-by-sa and MIT license