Toy trabajando con SQLServer 2000 y sp3.
Necesito hacer una depuración de unas tablas y a la vez de unos archivos
fisicos, (las rutas están almacenadas en una tabla) pero el script aunque no
te indica explicitamente que falla observas que realmente no borra los
archivos fisicos, de lo que veo sucede que el archivo tiene una ruta que el
comando "del" en el xp_cmdshell no entiende, y es \\
Adjunto la parte que falla:
DECLARE @VAR_RECFILENAME AS VARCHAR(125)
DECLARE @Comando AS VARCHAR(150)
DECLARE @Result int
SET @Comando = 'DEL ' + @VAR_RECFILENAME
set @VAR_RECFILENAME=
'c:\\RECORDINGS\IR100000\IR200946\RecordedCall2A00001220.wav'
EXEC master..xp_cmdshell @Comando
Este es el script completo:(Para que me hagan otras recomendaciones) Mcuhas
gracias.
USE CallRecordings
GO
/*
Inicio de depuracion de archivos
Declaracion de variables
Aqui se debe definir la fecha limite hasta donde se borraran los datos
La fecha es almacendada en la variable @dt_Fecha_Lim
La fecha debe definirse bajo el formato 'AAAA-MM-DD HH:MM:SS.MMM'
*/
DECLARE @VAR_RECID AS VARCHAR(20)
declare @w_limite as int
declare @w_cuenta as int
DECLARE @VAR_RECFILENAME AS VARCHAR(125)
DECLARE @dt_Fecha_Lim AS DATETIME
DECLARE @Comando AS VARCHAR(150)
DECLARE @Result int
select @w_limite = 5000
select @w_cuenta = 0
set rowcount @w_limite
/*SET @dt_Fecha_Lim = '1900-12-30 00:00:00.000' -- Cambiar aqui el valor de
Fecha Limite*/
select @dt_fecha_lim = dateadd(m,-12,getdate())
PRINT 'Iniciando depuracion de tablas con Fecha limite: ' +
convert(varchar(20),@dt_Fecha_Lim)
PRINT 'Seleccion de registros para depuracion Tabla I3_RecordingData...'
DECLARE recordingdata_cursor cursor for
SELECT recordingid, recordingfilename FROM
I3_RECORDINGDATA WHERE RECORDINGDATE <= @dt_Fecha_Lim
OPEN recordingdata_cursor
FETCH NEXT FROM recordingdata_cursor INTO @VAR_RECID,@VAR_RECFILENAME
WHILE @@FETCH_STATUS = 0 and (@w_cuenta < @w_limite)
BEGIN
DELETE FROM I3_ARCHIVEWORK WHERE RECORDINGID=@VAR_RECID
DELETE FROM I3_IMPORTRULES WHERE RECORDINGID=@VAR_RECID
DELETE FROM I3_RECORDINGAUDIT WHERE RECORDINGID=@VAR_RECID
DELETE FROM I3_RECORDINGERRORS WHERE RECORDINGID=@VAR_RECID
DELETE FROM I3_RECORDINGFILTERS WHERE RECORDINGID=@VAR_RECID
@VAR_RECFILENAME
PRINT 'Borrando el archivo Fisico: ' + @VAR_RECFILENAME
SET @Comando = 'DEL ' + @VAR_RECFILENAME
EXEC @Result=master..xp_cmdshell @Comando
IF (@Result=0)
BEGIN
PRINT ' '
PRINT 'Archivo: ' + @VAR_RECFILENAME + ' borrado Exitosamente.'
END
ELSE
BEGIN
PRINT ' '
PRINT 'Fallo al borrar el archivo: ' + @VAR_RECFILENAME
END
select @w_cuenta = @w_cuenta +1
select @w_cuenta
FETCH NEXT FROM recordingdata_cursor INTO @VAR_RECID,@VAR_RECFILENAME
END
PRINT 'Fin de Depuracion en Cascada de Tablas..'
CLOSE recordingdata_cursor
DEALLOCATE recordingdata_cursor
PRINT ' '
PRINT 'Depurando tabla I3_RECORDINGDATA...'
PRINT ' '
DELETE FROM I3_RECORDINGDATA WHERE RECORDINGDATE <= @dt_Fecha_Lim
PRINT ' '
PRINT ' '
PRINT 'Fin de depuracion de tablas'
go
Leer las respuestas