Hay una posibilidad de truncar con una instrucción SQL, varias tablas?

Como este:

 truncate table #OBJ_AvailabilityTraining, #OBJ_AvailabilityHoliday, #Dates_temp;

Que respecta a

OriginalEl autor user2206834 | 2013-04-10

6 Comentarios

  1. 5

    No, sólo puede truncar una tabla con el comando TRUNCATE. Para truncar varias tablas puede utilizar T-SQL y iterar a través de los nombres de tabla para truncar cada vez.

    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

    Puedes tener todos tus nombres de la tabla separados por comas en @tableList variable y sí se puede truncar múltiples tablas de diferentes esquemas de si están prefijados.

    um… ¿esto en realidad?

    OriginalEl autor IndoKnight

  2. 8

    Puede utilizar el sp_MSforeachtable procedimiento almacenado como:

    USE MyDatabase
    EXEC sp_MSforeachtable 'TRUNCATE TABLE ?'

    O usted puede crear una Instrucción SQL

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

    y ejecutar esta por encima de la instrucción SQL

    perfecto, justo lo que estaba buscando, gracias!
    perfecto. He utilizado este en SSIS el uso de exec sql para obtener la lista y un bucle foreach para recorrer cada uno. Supongo que se podría hacer lo mismo en SSMS con un cursor.
    sp_MSforeachtable es MSSQL, esta pregunta es MySQL.

    OriginalEl autor Pankaj Agarwal

  3. 8

    No. Pero hay una alternativa:

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

    Ejemplo :

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

    Ahora tienes a continuación los Resultados por encima de Select Consulta

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

    o usted puede usar algo como

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

    Link 1

    Enlace 2

    Actualización:

    Mirando a la mesa en su Ejemplo Query en su Pregunta

    truncate table #OBJ_AvailabilityTraining, #OBJ_AvailabilityHoliday, #Dates_temp

    Creo desea Truncate todos tablas temporales.

    Puede hacerlo con un simple Query como este

    select 'Truncate table ' + TABLE_NAME from tempdb.INFORMATION_SCHEMA.TABLES
    personalmente he tenido que utilizar SELECT concat('Truncate table ', TABLE_NAME) para obtener la salida correcta. Pero gracias por la idea general!

    OriginalEl autor Luv

  4. 2

    Bono ejemplo, truncar todas las tablas en una base de datos de partida con una cadena…

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

    OriginalEl autor doublejosh

  5. 1

    Acaba de entrar fácilmente en esto de MySQL declaración:

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


    y así sucesivamente.

    Cambiar el yourtablename con la suya.

    No olvidar el punto y coma ;

    TRUNCATE yourtablename es suficiente derecha?

    OriginalEl autor Alfa Renaldo Aluska

  6. 0

    He tenido que cambiar el código enviado por IndoKnight porque me arroja un error en la instrucción truncate así que cambiar el código por esto, es bastante similar, pero la truncar parte:

    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

    El truco es usar QUOTENAME poner entre corchetes el nombre de la tabla y el esquema. Tal vez IndoKnight solución no funciona en la versión más reciente de la base de datos. Espero te sirva de ayuda.

    OriginalEl autor Xavi Duro

Dejar respuesta

Please enter your comment!
Please enter your name here