Executando Scripts .sql com xp_cmdshell

Boa tarde galera!

Então estou fazendo meu primeiro post sobre assuntos de SQL Server.

Let’s GO!        openterm_png_optimized

Vamos falar sobre o comando xp_cmdshell  e tendo como exemplo a execução de códigos t-sql através de um script .sql.

Em resumo o  xp_cmdshell executa comandos shell do windows.

Eu sempre tive  dúvida se era possível executar scripts t-sql de um diretório através do SSMS (Sql Server Management Studio).No prompt de comando existe a opção “sqlcmd” que te dá a possibilidade de realizar a conexão com o SQL Server e fazer consultas, inserções e até a execução de scripts .sql.

Vamos ao exemplo, usando o comando xp_cmdshell com o sqlcmd do DOS, mas executando é claro no Management Studio…

Crie uma pasta no C:\Script_sql\.

paint 1

Para que o SQL Server reconheça a pasta, a conta de serviço da engine precisa ter permissão.

OBS.: Caso você não saiba qual conta está configurada para o serviço do database engine. Execute o seguinte código no SSMS:

declare @sqlserver varchar(200)

EXEC master..xp_instance_regread @rootkey='HKEY_LOCAL_MACHINE',
@key='SYSTEM\CurrentControlSet\Services\MSSQLSERVER',

@value_name='objectname', @value= @sqlserver OUTPUT

print 'A Conta de Serviço da Engine do SQL Server é:
' +convert(varchar(30),@sqlserver)

Continuando a configuração da pasta Script_sql, você clica com o botão direito, depois em Propriedades-> guia Segurança-> Editar -> Adicionar. Digita a conta do sql server e clica em verificar nomes e depois dá um OK.

OBS.: Para executar essas ações você precisa ser administrador ou proprietário da pasta.

Depois clica em controle total para a conta do SQL Server.

O Script “instpubs”que está na pasta “Scripts_sql”, cria o banco de dados pubs, objetos e os dados do mesmo.

Dada as devidas permissões  para a pasta vamos executar o código t-sql através do SSMS.Entre no Management Studio e digite o código que segue abaixo:


/*Declaração das variáveis do comando xp_cmdshell*/

Declare @comando varchar(800),
        @arquivo varchar(100),
        @servidor varchar(50),
        @caminho varchar(100),
        @extensao varchar(10)

set @servidor = N'(local)' /*Nome do Servidor Local*/
set @caminho = N'C:\Scripts_SQL\' /*Caminho Raíz*/
set @extensao = N'.sql' /*Extensao do Arquivo*/
set @arquivo = N'instpubs' /*Arquivo .sql que está na pasta*/

--Comando que será executa pelo xp_cmdshell
set @comando = N'sqlcmd -S ' + @servidor + ' -i ' + @caminho+
@arquivo + @extensao

exec master.dbo.xp_cmdshell @comando

O comando acima produzirá o seguinte resultado no SQL Server.

paint 5

Resumindo, o comando xp_cmdshell fez com que o SQL Server Management Studio executasse códigos shell do windows que no caso “sqlcmd”.

Obrigado pessoal!!!!

Patrocínio Maia

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s