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.
Espero que gostem e façam bom uso.