Borrado de tablas temporales | SQL Server Performance Forums

SQL Server Performance Forum – Threads Archive

Borrado de tablas temporales

Buenas a [email protected], Necesitaria que me echaseis una cable con un Procedimiento almacenado para poder borrar todas las tablas temporales de una base de datos, lo tengo montado de tal forma que todas las tablas q se generan temporales de la BBDD empizan por TMP% mi problema surge cuando intento meter en un bucle una sentencia SQL como drop table @nombretabla.. os paso el store procedure a ver si me podeis echar un cable
CREATE PROCEDURE BORRAR_TMP
AS
SELECT NAME INTO BORRAR FROM SYSOBJECT
WHERE NAME LIKE ‘tmp%’ AND XTYPE = ‘U’;
DECLARE @NTABLA
SET @NTABLA = BORRAR.NAME
WHILE IF @NTABLA = NOTnull
BEGIN
DROP TABLE @NTABLA
RETURN (1);
END IF
ELSE
RETURN(0);
END
ES UNA IDEA NO ESTA PROBADA SI PODEIS AYUDARME OS AGRADECERIA.. UN SALUDO
[?]

Hay varios problemas de acuerdo a lo que veo:
BORRAR no está declarada.
DECLARE @NTABLA le falta el tipo de variable, por ejemplo "as char(25)" o lo que corresponda. Por lo tanto lo que sugiero es que con el Administrador coorporativo expandas tu base de datos y las borres directamente allí. Otra sugerencia es que normalizes la tablas temporarias, esto es que en código comiencen con #NombreTabla.
De esta forma si no la borras por programa (que sería lo ideal), estas tablas se generan en tempdb, por lo tanto al bajar el servicio de SQl se borran automáticamente.
Luis Martin
Moderator
SQL-Server-Performance.com All in Love is Fair
Stevie Wonder
All postings are provided “AS IS” with no warranties for accuracy.
Buenas Luis A ver te cuento el tema de borrar por programa ; es porque estas tablas temporales no las genero yo las genera usuarios que lanzan consultas de millones de registro pero dejan la basurilla en la base de datos. para quitar espacio hemos optado por generar un procedimiento que todos los viernes a las 7pm se borren todas las tablas q inicien por ‘TMP_’ es por ello que necesito generarlo asi sino tendria que estar a las 7pm borrando las tablas.. jejejeje mi pregunta mas concreta que resolveria mis dudas es si a la sentencia "drop table" le puedo pasar un valor que antes lo eh metido en una variable. drop table @ntable <— por ejmplo. gracias y hasta pronto P.D. la anterior sentencia lo que realiza el valor BORRAR es meter el resultado de la select en una tabla que se llama BORRAR y luego recorrer esta tabla con lo nombres eh ir borrando una a una hasta que el valor de ese camop sea NULL.

No se puede asignar una variable a la sentencia DROP. Una forma de hacerlo es la siguiente: declare @nombre as char (50)
declare @borrar as nchar (50)
set @nombre = ‘prueba’ set @borrar = ‘drop table’ + ‘ ‘ + @nombre EXECUTE sp_executesql @borrar Con esta idea tendrías que poder resolver el problema. Luis Martin
Moderator
SQL-Server-Performance.com All in Love is Fair
Stevie Wonder
All postings are provided “AS IS” with no warranties for accuracy.
Gracias Luis al final es lo que hice. os pego el Procedimiento para quien lo necesite;
Primero genero un arrays con las tablas a borrar: IF OBJECT_ID ( ‘crea_array_tmp’, ‘P’ ) IS NOT NULL
drop procedure crea_array_tmp;
create procedure CREA_ARRAY_ZZ
AS
select name into papelera from sysobjects
where name like ‘tmp%’ and xtype = ‘U’
–Print ‘CREACION CORRECTA’
return(0)
GO LUEGO, creamos el procedimiento para borrar todas las tablas.. desde ese arrays. CREATE PROCEDURE RECORRE_LIMPIA
AS
declare @variable nvarchar(256), @ntabla char(256), @row char(6)
set @row = (select count(*) from papelera)
select @row
while @row > 0
Begin
set @ntabla = (select top 1 name from papelera)
set @variable = ‘DROP TABLE ‘ + @ntabla
exec(@variable)
select @ntabla
set @[email protected]
delete from papelera where name = @ntabla
**comprobacion de la tabla borrada.
select @ntabla
end
ESPERO os sirva de algo a mi me funciona perfectamente. Gracias y hasta pronto
go

Gracias por compartirlo.
Luis Martin
Moderator
SQL-Server-Performance.com All in Love is Fair
Stevie Wonder
All postings are provided “AS IS” with no warranties for accuracy.
]]>