sexta-feira, 18 de fevereiro de 2011

Consultar tabela do banco B através do banco A do mesmo servidor

Olá, passei aqui rapidinho para deixar uma dica:

Para consultar uma tabela do banco B estando no banco A do mesmo servidor, faz-se o seguinte:

SELECT * FROM  [BANCO B]..tabela

Até +!

quarta-feira, 19 de janeiro de 2011

Criar tabela a partir de uma consulta (select into)

Olá,

Para criar tabelas através de uma consulta basta usar o select into.
É bem simpleas: faça a consulta que traga os dados que você precisa e coloque o into (nome da tabela) antes de from.

Ex:

Select codigo_aluno, nome into temp from usuario

Assim é criado a tabela chamada temp, com duas colunas: codigo_aluno e nome.

terça-feira, 30 de novembro de 2010

O que é SET NOCOUNT ON?

Olá pessoal, ontem aprendi um comando legal e gostaria de compartilhar.
Ao executar uma procedure o SQL Server retorna para a aplicação o total de linhas afetadas.

Ex: (1 row(s) affected)


Esse número pode parecer pequeno, mas se a aplicação executa um procedimento que faz muitas operações ( insert, update, delete ou select) várias vezes durante o dia esse número pode crescer assustadoramente compromentendo o desempenho da aplicação.

O SET NOCOUNT ON é uma instrução sql que desativa a contagem de registros feita em cada instrução SQL dentro de uma procedure.
Isso evita o excesso de tráfego durante a execução da procedure.
Para utiliza-lo basta colocar no começo do procedimento a cláusula
SET NOCOUNT ON.


quarta-feira, 17 de novembro de 2010

Dica interessante para usar antes de fazer update ou delete

Bom gente eu sou mestra em fazer as coisas no impulso e acabo fazendo coisa errada! Isso era um problema até que me ensinaram a usar o begin tran antes de usar o update, delete ou até mesmo o insert no banco de dados. Sabe aquela coisa de esquecer a cláusula where e dar update na tabela inteira? Pois é, usando o begin tran antes isso não é mais problema.
Faço assim:

--abro uma transação

Begin tran

--verifico quantas transaçãoes estao abertas. Se executei o begin tran uma vez, tenho que ter uma transação apenas aberta.

select @@trancount

--faço o update, delete , insert...

delete from exemplo where id_exemplo = 1

--verifico se fiz tudo certo. Se deu alguma coisa errada:

rollback

--se deu certo:

commit

--verifico se fechou a transação:

select @@trancount

--se tiver fechado retorna 0.

O importante é não esquecer de fechar a transação com o commit no caso de ter dado tudo certo ou o rollback se alguma coisa deu errada.

Restore de uma banco de dados sql 2000

Um dia desses eu precisei criar um procedimento para efetuar o restore do banco de dados de um sistema. A princípio eu criei o procedimento no mesmo banco que eu queria restaurar e logicamente nao funcionou, pois como não tem como restaurar um banco em uso.
Então esse procedimento tem que ser criado em outro banco, no meu caso eu criei no banco Master (banco de dados de sistema). Se esse procedimento for usado em um sistema será necessário criar outra string de conexão com o banco que será utilizado, no meu caso com o banco Master.
Outra observação é limitar o acesso ao banco de dados a um usuário simples. Fazemos isso na seguinte query:
ALTER DATABASE EXEMPLO SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
Quando limitamos o acesso a um determinado banco de dados, como single user, estamos eliminando a possibilidade deste banco ser acesso simultaneamente por diversas conexões ou usuários.
Esse procedimento tem como parâmetro de entrada o caminho (diretório) onde se encontra o arquivo de backup.

CREATE PROCEDURE S_RESTORE_EXEMPLO

@ARQUIVO VARCHAR(255)

AS

DECLARE @strSQL varchar(300)

--Limita o acesso ao banco de dados a um usuário simples.
ALTER DATABASE EXEMPLO SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

--efetua o restore
set @strSQL = 'RESTORE DATABASE EXEMPLO FROM DISK ='''+ @ARQUIVO +''' WITH FILE = 1, NOUNLOAD, STATS = 10'
exec (@strSQL)

--retorna o acesso ao banco a usuários múltiplos.

ALTER DATABASE EXEMPLO SET MULTI_USER;

Efetuando backup do banco de dados SQL 2000

Hoje vou mostrar como criar um procedimento para efetuar backup completo de um banco de dados sql 2000.
Nesse procedimento o usuário informa o nome que será dado ao arquivo de backup e dentro do procedimento eu informo onde esse backup será salvo.

CREATE PROCEDURE S_BACKUP_EXEMPLO

@NOME VARCHAR(255)

As

DECLARE @CAMINHO VARCHAR(100)

SET @CAMINHO = 'D:\backup_banco\'+@NOME+'.BAK'

BACKUP DATABASE EXEMPLO
TO DISK = @CAMINHO

segunda-feira, 27 de setembro de 2010

Verificar maior numero de bytes usado em um campo de um tabela

Olá pessoal,

Em alguma situação talvez seja necessário descobrir o número máximo de bytes utilizado em um campo da tabela.
Por exemplo, tabela Usuario, o campo nome é do tipo text. Quero saber o tamanho da maior string desse campo, ou seja o maio nome.
Isso é simples usando a seguinte query:

SELECT MAX(DATALENGTH(nome) ) as tamanho_maximo FROM Usuario

Resultado: