Todos nós sabemos que esse não é o papel do banco de dados, mas se um dia precisar por algum motivo, saiba que, sim é possível compactar um arquivo via ‘T-SQL’ no SQL Server.

Vamos ver na pratica como isso funciona.

No exemplo de compactação utilizou-se o 7-zip, então, caso não tenha instalado, instale, pois o mesmo será utilizado.

Depois de realizar o download e instalar com sucesso, é necessário que copie o arquivo ‘7z.exe’ para a pasta ‘system32’ da máquina em que o SQL Server está instalado.

Agora precisamos que seja habilitado o uso do ‘xp_cmdshell’, caso ele não esteja habilitado, para isso, execute os comandos descritos abaixo:

EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
EXEC sp_configure 'xp_cmdshell', 1
GO
RECONFIGURE
GO

Habilitado o ‘xp_cmdshell’, vamos criar a procedure que será a responsável por realizar a compactação de determinado arquivo.

Antes de criar a procedure, vamos entender quais são seus parâmetros.

A procedure é composta por três parâmetros, são eles: ‘@V_FILE’, ‘@V_DIR’ e ‘@V_NAME_FILE_COMPACT’.

@V_FILE É o nome do arquivo que deseja compactar.
@V_DIR É onde está o arquivo que deseja compactar.
@V_NAME_FILE_COMPACT É o nome do arquivo compactado.
-- =============================================
-- Author: Ruberlei Cardoso Bento
-- Create date: 23/07/2016
-- Description: Compact Files
-- =============================================
CREATE PROCEDURE SP_COMPACT_FILES(@V_FILE VARCHAR(100), @V_DIR VARCHAR(100), @V_NAME_FILE_COMPACT VARCHAR(100))
AS
DECLARE @V_COMMAND_LINE VARCHAR(1000);

BEGIN

	DECLARE @V_RETURN INT = 0;

	SET @V_COMMAND_LINE = '7z a -tzip "' + @V_DIR + @V_NAME_FILE_COMPACT + '" "' + @V_DIR + @V_FILE + '" ' ;
	PRINT @V_COMMAND_LINE	
	
	CREATE TABLE #T_RESULT
	(
		ID INT IDENTITY(1,1),
		DESCRI VARCHAR(1000)
	);

	INSERT INTO	#T_RESULT 
	EXEC @V_RETURN = master..xp_cmdshell @V_COMMAND_LINE;

	IF @V_RETURN <> 0	
	BEGIN	
		SELECT * 
		FROM #T_RESULT
		WHERE DESCRI IS NOT NULL;
	END
	ELSE
	BEGIN
		SELECT 'SUCESS FILE ' + @V_DIR + @V_NAME_FILE_COMPACT AS SUCESS
	END;
		
END;

Agora vamos executar a procedure para que possamos ver o resultado.

No exemplo, criei uma pasta no ‘C:\’ chamada ‘Files’, dentro dela criei um arquivo chamado ‘teste1.txt’.

 

EXEC SP_COMPACT_FILES 'teste1.txt', 'C:\Files\', 'COMPACTADO.ZIP'

Vejam o resultado na imagem abaixo.

files

Espero que gostem e façam bom uso.


0 comentário

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *