Compactar Arquivos via SQL Server

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:

[sourcecode language=”sql”]
EXEC sp_configure ‘show advanced options’, 1
GO
RECONFIGURE
GO
EXEC sp_configure ‘xp_cmdshell’, 1
GO
RECONFIGURE
GO
[/sourcecode]

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.

[sourcecode language=”sql”]
— =============================================
— 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;

[/sourcecode]

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’.

[sourcecode language=”sql”]

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

[/sourcecode]

Vejam o resultado na imagem abaixo.

files

Espero que gostem e façam bom uso.

Deixe um comentário

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

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.