sql truncate

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'')

Enlace 1

Enlace 2

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;