Clique no banner para conhecer e adquirir o meu treinamento de Bancos de Dados no Azure

SQL Server – Como listar, ler, escrever, copiar, excluir e mover arquivos com o CLR (C#)

Post Views 7,735 views
Reading time 9 minutes

Olá pessoal,
Bom dia!

Nesse post vou mostrar a vocês como listar, ler, escrever, copiar, excluir e mover arquivos utilizando o CLR (C#), que é uma poderosa ferramenta para aumentar a gama de funcionalidades do SQL Server. Como eu crio muitas rotinas de trocas de arquivos no meu trabalho, seja importando dados de uma base externa ou exportando os dados para arquivos, resolvi criar esse post para ajudar as pessoas que tem as mesmas necessidades e que podem resolver facilmente essas questões pelo próprio SQL Server, o que é muito performático e simples de criar, implementar e manter.

Antes de começar, gostaria de citar dois posts relacionados com esse assunto:

Listando arquivos

Como listar arquivos no SQL Server

Para listar arquivos, eu utilizo o uma table-valued function, que é muito útil para listar os arquivos já filtrando com o WHERE, posso ordenar os resultados, utilizar SELECT * INTO para salvar os resultados em uma tabela.. Enfim, é uma solução bem flexível e prática:

Usage example:
SQL Server - How to list files CLR

Código-fonte:

Lendo arquivos linha a linha

Como ler um arquivo de texto linha a linha no SQL Server

Para a tarefa de ler um arquivo linha a linha, eu vou utilizar novamente um table-valued function do CLR, que vai me permitir realizar um select na view e retornar o conteúdo do arquivo. Posso exportar esses dados para uma tabela, filtrar, ordenar, etc.. tudo com muita flexibidade.

Exemplo de uso:
SQL Server - How to read files line by line with CLR

Código-fonte:

Lendo um arquivo e retornando como string

Como ler um arquivo e retornar como uma string no SQL Server

Para esta necessidade optei por criar uma função scalar para uma utilização muito comum durante a criação de rotinas é a necessidade de importar um arquivo e não retornar linha a linha, mas sim uma string com o conteúdo todo do arquivo. Utilizo muito isso durante a importação de arquivos XML, por exemplo.

Usage example:
SQL Server - How to read files with CLR

Código-fonte:

Verificando se um arquivo ou diretório existe

Como verificar se um arquivo ou diretório existe no SQL Server

Funções do tipo scalar e com retorno booleano (BIT), elas permitem verificar se um arquivo ou diretório existe no filesystem. Seu código-fonte é tão simples quanto sua utilização.

Usage example:
SQL Server - How to check if a file or directory exists with CLR

Código-fonte da fncArquivo_Existe:

Código-fonte da fncDiretorio_Existe:

Exportando uma query, tabela ou view do SQL Server para arquivo

Como exportar os dados de uma tabela do SQL Server para arquivo

Com essa Stored Procedure, podemos facilmente exportar os dados de uma tabela ou view do SQL Server para um arquivo de texto delimitado ou não, onde cada registro será uma linha do arquivo criado

Usage example:
SQL Server - How to export query table to text csv file with CLR

Código-fonte:

Exportando uma string para arquivo no SQL Server

Como exportar uma string do SQL Server para arquivo

Com essa Stored Procedure, podemos facilmente exportar os dados de string do SQL Server e exportar essa string para um arquivo texto. Não será forçado nenhuma quebra de linha no arquivo, apenas se na string ouvir os caracteres de quebra de linha (line feed e/ou carriage return).

O parâmetro Ds_Codificacao permite variar entre UTF-8, ISO-8859-1 e vários outros suportados pelo .NET Framework. A lista completa das codificações pode ser encontrada aqui: Encoding.GetEncodings Method

O parâmetro Ds_Formato_Quebra_Linha permite alternar entre os formatos de quebra de linha de cada sistema operacional, sendo possível utilizar os valores Windows, Unix e MAC.

O parâmetro Fl_Append permite que caso o arquivo já exista, ele seja apagado e sobrescrito (Fl_Append = 0) ou o conteúdo seja adicionado ao final do arquivo (Fl_Append = 1)

Usage example:
SQL Server - How to export string variable to text csv file with CLR

Código-fonte:

Copiando arquivos no SQL Server

Como copiar arquivos no SQL Server

Procedure que pode ser utilizada para copiar um arquivo de um diretório para outro

Usage example:
SQL Server - How to copy a file with CLR

Código-fonte:

Movendo arquivos no SQL Server

Como mover arquivos no SQL Server

Procedure que pode ser utilizada para mover um arquivo de um diretório para outro, mantendo o mesmo nome do arquivo

Usage example:
SQL Server - How to move a file with CLR

Código-fonte:

Renomeando arquivos no SQL Server

Como renomear arquivos no SQL Server

Procedure que pode ser utilizada para renomear um arquivo, permitindo até movê-lo com outro nome

Usage example:
SQL Server - How to rename a file with CLR

Código-fonte:

Apagando arquivos no SQL Server

Como apagar arquivos no SQL Server

Procedure que pode ser utilizada para apagar um arquivo físicamente

Usage example:
SQL Server - How to delete a file with CLR

Código-fonte:

Apagando todos os arquivos de um diretório no SQL Server

Como apagar todos os arquivos de um diretório no SQL Server

Procedure que pode ser utilizada para apagar todos os arquivos de um determinado diretório

Usage example:
SQL Server - How to delete all directory files with CLR

Código-fonte:

Apagando um diretório no SQL Server

Como apagar um diretório no SQL Server

Procedure que pode ser utilizada para apagar um determinado diretório no SQL Server. Caso esse diretório possua arquivos, eles devem ser apagados antes da exclusão do diretório.

Usage example:
SQL Server - How to delete directory with CLR

Código-fonte:

And that's it, folks!
Espero que tenham gostado do post e que ele lhe seja útil

Abraço!