Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Nova maneira de copiar arquivos no SQL Server 2019


Dois novos procedimentos armazenados introduzidos no SQL Server 2019 são sys.xp_copy_file e sys.xp_copy_files , que permitem copiar arquivos.

Antes do SQL Server 2019, você precisaria usar xp_cmdshell , que gera um shell de comando do Windows e passa uma string para execução. Os novos procedimentos armazenados introduzidos no SQL Server 2019 permitem copiar arquivos sem depender de xp_cmdshell .


Exemplo 1 - Copiar 1 arquivo


Você pode usar sys.xp_copy_file para copiar um único arquivo. O uso desse procedimento armazenado permite que você também nomeie o novo arquivo.

Exemplo no Linux:
EXEC master.sys.xp_copy_file
'/var/opt/mssql/data/samples/albums.csv',
'/var/opt/mssql/data/samples/albums2.csv';

Executei com sucesso este código no meu Mac, que usa o SQL Server 2019 no Linux.

Para copiar arquivos em um sistema Windows, você precisa usar a convenção de caminho do Windows.

Exemplo no Windows:
EXEC master.sys.xp_copy_file
'D:\mssql\data\samples\albums.csv',
'D:\mssql\data\samples\albums2.csv';

Exemplo 2 – Copiar vários arquivos


Você pode usar sys.xp_copy_files para copiar vários arquivos.

Exemplo no Linux:
EXEC master.sys.xp_copy_files
'/var/opt/mssql/data/samples/albums*.csv',
'/var/opt/mssql/data/samples/final';

Aqui estou na mesma pasta do exemplo anterior. Neste caso, copiei todos os arquivos que começam com albums e termine com .csv . Eu uso o asterisco (* ) curinga para selecionar arquivos que podem incluir outros caracteres após os albums papel.

Este exemplo copia os arquivos para o /var/opt/mssql/data/samples/final diretório.

Exemplo no Windows:
EXEC master.sys.xp_copy_file
'D:\mssql\data\samples\albums*.csv',
'D:\mssql\data\samples\final';

Excluindo arquivos


O SQL Server 2019 também introduziu os sys.xp_delete_files procedimento armazenado, que permite excluir arquivos. Consulte Como excluir arquivos no SQL Server 2019 para obter exemplos de como excluir os arquivos criados neste artigo.