Truncar múltiples tablas en una declaración MySQL
truncate (6)
Ejemplo de bonificación, truncar todas las tablas en una base de datos comenzando con una cadena ...
SELECT CONCAT(''TRUNCATE TABLE '', TABLE_NAME, '';'')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = ''my_database_name''
AND TABLE_NAME LIKE ''cache_%'';
¿Existe la posibilidad de truncar con una instrucción SQL, varias tablas?
Me gusta esto:
truncate table #OBJ_AvailabilityTraining, #OBJ_AvailabilityHoliday, #Dates_temp;
Saludos
He tenido que cambiar el código enviado por IndoKnight porque me lanza un error en la declaración de truncado, así que cambio el código por esto, es bastante similar pero la parte de truncado:
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 para colocar los corchetes en el nombre y el esquema de la tabla. Quizás la solución IndoKnight ya no funciona en una versión más reciente de la base de datos. Espero que ayude.
No, solo puede truncar una sola tabla con el comando TRUNCATE. Para truncar varias tablas, puede usar T-SQL e iterar a través de los nombres de las tablas para truncar cada una a la 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
Puede tener todos los nombres de sus tablas separados por comas en la variable @tableList y sí, puede truncar varias tablas de diferentes esquemas si están prefijadas.
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 debajo de los resultados para la consulta de Select
anterior
TRUNCATE TABLE TBL_ORDERS_2001
TRUNCATE TABLE TBL_ORDERS_2002
TRUNCATE TABLE TBL_ORDERS_2003
TRUNCATE TABLE TBL_ORDERS_2004
o puedes usar algo como
select ''Truncate table '' + TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_NAME in (''Table1'', ''Table2'')
Actualizar:
Mirando la tabla en su Query
ejemplo en su pregunta
truncate table #OBJ_AvailabilityTraining, #OBJ_AvailabilityHoliday, #Dates_temp
Creo que quieres Truncate
todas las tablas temporales .
Puedes hacerlo con una simple Query
como esta.
select ''Truncate table '' + TABLE_NAME from tempdb.INFORMATION_SCHEMA.TABLES
Puede utilizar el procedimiento almacenado sp_MSforeachtable de la siguiente manera:
USE MyDatabase
EXEC sp_MSforeachtable ''TRUNCATE TABLE ?''
O puede crear una declaración SQL
SELECT concat(''TRUNCATE TABLE '', TABLE_NAME, '';'')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE ''TableName%''
y ejecute esta instrucción SQL anterior
Simplemente ingrese fácilmente esta declaración de MySQL:
TRUNCATE TABLE yourtablename1;
TRUNCATE TABLE yourtablename2;
TRUNCATE TABLE yourtablename3;
... y así.
Cambia el nombre de tu contraseña con el tuyo.
No olvides el punto y coma;