Arquivo da tag: SQL

SQL – Apagando todos os registros de um banco de dados SQL Server

Bom, os leitores devem ter percebido que ultimamente tenho me aventurando a escrever algumas coisas sobre banco de dados. As experiências que tive em um projeto recente me levaram a ter que descobrir alguns macetes do SQL Server, os quais tratarei de publicar aqui na medida do possível.

Uma das necessidades da última aplicação era a constante troca de ambiente. Uma hora desenvolvimento, outra produção, outra qualidade, enfim.

Como o acesso era extramente restrito, não era algo trivial ficar “dropando” a base de dados, até porque nem era possível. O jeito era trabalhar direto no SQL para substituir algumas rotinas que a ferramenta e o acesso em nível administrativo facilitavam.

Por exemplo, para facilmente excluir todos os dados de todas a tabelas de um banco de dados SQL Server, a seguinte query resolve o problema:

-- desativa a integridade referencial
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
GO

EXEC sp_MSForEachTable '
IF OBJECTPROPERTY(object_id(''?''), ''TableHasForeignRef'') = 1
DELETE FROM ?
else
TRUNCATE TABLE ?
'
GO

-- reativa a integridade refencial
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
GO

Em detalhes, o que a query faz: ela usa uma stored procedure não documentada do SQL Server chamada sp_MSForEachTable. Resumidamente, esta stored procedure dispara um comando SQL passado por parâmetro em todas as tabelas de um database, sendo o nome da tabela substituído pelo caracter “?”, como pode ser visto na query anterior. Se além de de apagar os dados das tabelas, quiser também reiniciar a contagem dos campos de chave primária, mais conhecido como RESEED, bastaria colocar a seguinte query antes da reativação da integridade referencial:

-- Reinicia o contador de chave primária de todas as tabelas
EXEC sp_MSForEachTable '
IF OBJECTPROPERTY(object_id(''?''), ''TableHasIdentity'') = 1
DBCC CHECKIDENT (''?'', RESEED, 0)
'
GO

Na falta de ferramentas ou privilégios, esse tipo de macete é uma mão na roda.

Referência:

http://blogs.officezealot.com/mauro/archive/2006/03/12/9402.aspx

Abraços

Tomás

SQL Server – Exportando dados para o Excel

Frequentemente precisamos fazer exportações de dados para o excel. É claro que podemos fazer essas exportações utilizando o DTS ou o atual SSIS. Mas que tal fazer a exportação utilizando uma instrução SQL, mais fácil de ser disparada do que os pacotes de exportação ?

A função OpenRowSet permite que sejam feitos acessos a outros bancos de dados mesmo que estes não estejam cadastrados como linked servers. Funciona como um linked server inline.

Desta forma podemos fazer uma exportação para o excel em uma única instrução, veja :

1
2
3
4
INSERT INTO OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\teste.xls;User=Admin;Password=',
'SELECT ID, Empresa FROM [Sheet1$]')
SELECT customerid,companyname FROM customers

Algumas observações :

A planilha do excel (no exemplo teste.xls) tem que já existir com os cabeçalhos de campo, do contrário ocorre um erro

Permissões no diretório temporário do usuário do serviço do sql server/sql server agent são necessárias. Os seguintes links ajudam no caso de ocorrerem erros estranhos : http://support.microsoft.com/kb/814398/en-us e http://support.microsoft.com/kb/296711/EN-US/

Abraços

Tomás Vásquez
http://www.tomasvasquez.com.br

Fonte: http://www.bufaloinfo.com.br/