SQL Server – Operações com arquivos utilizando xp_cmdshell (Como listar, ler, escrever, copiar, excluir e mover arquivos)

SQL Server – Operações com arquivos utilizando xp_cmdshell (Como listar, ler, escrever, copiar, excluir e mover arquivos)
5 (100%) 2 votos

Olá pessoal!

Neste post, vou demonstrar como realizar operações com arquivos utilizando a procedure xp_cmdshell, como copiar arquivos, excluir, renomear, mover, criar diretórios, etc.

Esse post é um complemento de outros de operações com arquivos, utilizando outras soluções:

Para ativar o xp_cmdshell, basta executar o comando abaixo:

stpArquivo_Existe
Stored Procedure que retorna uma variável booleana (BIT) informando se um determinado arquivo ou diretório existe.

Código-fonte

Exemplos de utilização

Verificando se um diretório existe

Verificando se um arquivo existe

stpArquivo_Listar
Stored Procedure que retorna a listagem de arquivos e subdiretórios de um determinado diretório.

Código-fonte

Resultado:

stpArquivo_Ler
Stored Procedure que lê um arquivo de texto e retornar o seu conteúdo em forma de tabela.

Código-fonte

Resultado:

Como vocês devem ter reparado, a importação de arquivos com acentuação não funciona muito bem, pois o comando type do Prompt do DOS, mesmo no Windows em português, não trabalha muito bem com isso. Como alternativa, podemos utilizar o velho conhecido Power Shell.

Código-fonte em Powershell

Resultado:

stpEscreve_Arquivo
Stored Procedure que grava um texto em um arquivo. Devido à uma limitação do Prompt do DOS, não é possível gravar textos com quebras de linhas (para isso, utilize a solução com OLE Automation ou CLR).

Código-fonte

Resultado:

stpApaga_Arquivo
Stored Procedure que exclui um arquivo físicamente no disco ou na rede.

Código-fonte

Resultado apagando um arquivo:

Resultado utilizando caractere curinga:

stpCopia_Arquivo
Stored Procedure que copia um arquivo para um outro diretório, podendo ser local ou na rede.

Código-fonte

Resultado:

stpMove_Arquivo
Stored Procedure que move um arquivo para um outro diretório, podendo ser local ou na rede.

Código-fonte

Resultado:

stpCria_Diretorio
Stored Procedure que cria um diretório em um local especificado.

Código-fonte

Resultado:

stpApaga_Diretorio
Stored Procedure que apaga um diretório, com possibilidade de apagar também arquivos e sub-pastas.

Código-fonte

Resultado:

Como já comentei em alguns posts aqui no blog, não sou nada fã de habilitar e utilizar o xp_cmdshell, uma vez que ele dá “poderes” para qualquer usuário sysadmin da instância executar qualquer comando que o usuário que inicia o serviço do SQL Server possui privilégio, desde um comando dir, até executar delete, format, etc..

Por este motivo, prefiro adotar a utilização do CLR, onde você programa as rotinas utilizando a linguagem de programação C# e o .NET Framework e publica as rotinas na instância. Tanto os usuários sysadmin quanto os usuários normais só conseguem utilizar os métodos implementados na biblioteca CLR, não permitindo a execução de códigos maliciosos que não estejam programados, mas entendo que nem todo DBA quer ter o trabalho de criar bibliotecas em C# e acaba optando por utilizar uma abordagem mais simples, utilizando xp_cmdshell e comandos do DOS e/ou PowerShell.

É isso aí, pessoal!
Espero que tenham gostado desse post e até a próxima.

SQL, sql server, sql server 2008, sql server 2008 R2, Oracle, Oracle Database, Oracle 11g, Oracle 10g, Oracle 12c, MySQL, Firebird, Consultoria, Consultor, Programador, Programação. Desenvolvedor, Analista de Sistemas, DBA, Criação de website, Criação de Sistema Web, Vitória, Vila Velha, Guarapari, Espírito Santo, ES, Consultoria SQL em VItória, Treinamento, Curso, Prestação de serviço, prestar serviço, freelancer, freela, banco de dados, consultoria em banco de dados, consultor de banco de dados

Deixe uma resposta