Archive for category Banco de Dados

WHERE 1=1

 

Saudações caro leitor,

 

Atenção: O objetivo desse post não é discutir a utilidade inutilidade dessa ferramenta gambiara para montar queries dinamicamente.

 

Estava eu lendo uns artigos sobre SQL Server e me deparei com um post onde foi colocado a prova a eficiência do “WHERE 1=1”.

 

O autor fez uma comparação do resultado do plano de execução entre “WHERE 1=1” versus “WHERE SQRT(SQUARE(1 + 1)) * 3 = 6″ ou para quem não entendeu a brincadeira seria 6 = 6 usando funções do SQL Server.

 

E o resultado…. vocês podem ver abaixo. =\

 

 

E eu também cético não acreditei e fui rodar o SQL na minha própria máquina e o resultado é o mesmo… Se você não acredita como eu, rode e veja com seus próprios olhos. Rs

 

CREATE TABLE T (ID INT NOT NULL, TXT CHAR(32) NOT NULL)
 
;WITH CTE (ID) AS (
SELECT 1
UNION ALL
SELECT ID + 1 FROM CTE WHERE ID < 100000
)
 
INSERT INTO T
SELECT ID, REPLICATE('0', 32) FROM CTE
OPTION (MAXRECURSION 0)
 
UPDATE T SET ID = 1
UPDATE T SET ID = 1 WHERE 1 = 1
UPDATE T SET ID = 1 WHERE SQRT(SQUARE(1 + 1)) * 3 = 6

 

Loucura hein?! =\

 

Abraço e até a próxima.

 

Referências:
https://sqlfromhell.wordpress.com/2013/10/21/marcio-gomes-vs-sql-fight-2/

Tags: , ,

Como desabilitar o Auto Commit em SQL Server Management Studio

Saudações caro leitor,

 

Hoje vou falar de uma informação que pode ser trivial para alguns, irrelevantes para outro mas que em determinadas situações de pressão e temperatura pode ser um desespero para alguns.

 

Talvez vou saiba ou não, mas todos os scripts que executamos no gerenciador SQL Server Management Studio executam dentro de uma transação que tem um AUTO COMMIT, é isso mesmo ele “COMMITA” pra você automaticamente.

 

No dia à dia isso é quase irrelevante mas quando você precisa executar testes em que você deseja que a transação fique pendente, ou mesmo não quer correr o risco de cometer aquele deslize merda mexendo com um banco de dados que todo seu time usa.

 

Você pode ou deveria desabilitar o AUTO COMMIT, como fazer isso, simples…

 

Tools > Options > Query Execution > SQL Server > ANSI > MARCAR a opção SET IMPLICIT TRANSACTIONS

 

AutoCommit

 

Ai você se pergunta, mas e se eu esquecer de dar COMMIT ou ROLLBACK…

 

Quando você fechar a query vai aparecer a seguinte mensagem e basta você responder SIM (COMMIT) ou NÃO (ROLLBACK) e seja feliz.

 

AutoCommitClose

 

Abraço e até a próxima.

 

Referências:

Tags: , , , ,

SQL Server | Buscar por Tabela usada em Stored Procedures

Olá pessoal,

Recentemente precisei descobrir quais “stored procedures” utilizavam determinadas tabelas e eis que encontrei artigo que ensina de uma forma bem simples.

Seguem dois exemplos abaixo, um buscando apenas por stored procedures que utilizam a tabela de nome “Employee” e outro exemplo buscando pela tabela “Employee” e coluna “RateChangeDate”.

Exemplo buscando apenas pelo nome da tabela

USE AdventureWorks
GO
--Searching for Empoloyee table
SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%Employee%'
GO

Exemplo buscando pelo nome da tabela e nome de coluna

--Searching for Empoloyee table and RateChangeDate column together
SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%Employee%'
AND OBJECT_DEFINITION(OBJECT_ID) LIKE '%RateChangeDate%'
GO

Referências
http://blog.sqlauthority.com/2007/09/03/sql-server-2005-search-stored-procedure-code-search-stored-procedure-text/
http://blog.sqlauthority.com/2006/12/10/sql-server-find-stored-procedure-related-to-table-in-database-search-in-all-stored-procedure/
http://msdn.microsoft.com/pt-br/library/ms188737(v=sql.100).aspx

Tags: , , ,

App_Data ASPNETDB.MDF – Deployment

Recentemente encontrei algumas dificuldades para publicar uma aplicação ASP.NET MVC em um servidor zerado ou praticamente.

Elo só tinha IIS7.5 com ASP.NET 3.5, então restou para mim instalar o ASP.NET 4.0, o SQL Server Express e depois publicar a aplicação.

O maior problema foi com a geração o deploy do aspnetdb.mdf que é o arquivo de banco de dados que contêm a estrutura e dados para o funcionamento do MemberShip que já vem configurado e pronto para uso com o template de aplicação ASP.NET MVC.

 

Caso você tenha problemas com a “geração” do banco de dados na pasta App_Data ele pode ser causado por um dos motivos abaixo.

  • O servidor de banco de dados não está instalado (SQL Server/ SQL Server Express 2005/2008/2008 R2);
  • Você ainda não rodou o comando aspnet_regsql.exe para gerar o banco de dados padrão do ASP.NET no seu servidor de banco de dados;
  • Seu banco de dados pode não está rodando, são dois serviços que devem estar rodando, a instância do banco e o SQL Browser;
  • O datasource da sua string de conexão pode estar errada, errada entenda o nome da instancia está diferente do nome da instancia configurado na máquina onde você está fazendo o deploy;

 

Uma coisa interessante é que nesse último caso, apesar de meu “SQL Server Configuration Manager” dizer que o nome da instância era MSSQLSever que foi o nome que eu havia atribuido na instalação o nome era outro. Hahahaha

Como eu descobri isso ? Depois de sofrer horas sem fim..

Eu habilitei o servidor para aceitar conexões remotas que você pode ver como no link abaixo como fazer, após eu realizei a conexão através do SQL Server Management Studio informando o IP da máquina servidora do banco de dados.

 

Após cliquei com o botão direito em cima do IP que simbolizava a conexão e pedi as propriedades, e para minha supresa só estava o nome da máquina XPTO, e não havia nenhuma menção ao nome da instância.

Então alterei a string de conexão para ficar assim..

<add name=”ApplicationServices” connectionString=”data source=XPTO;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true” providerName=”System.Data.SqlClient” />

Onde XPTO é o nome da máquina onde está instalado o servidor de banco de dados.

 

Habilitando conexões remotas.
http://blogs.msdn.com/b/walzenbach/archive/2010/04/14/how-to-enable-remote-connections-in-sql-server-2008.aspx

Creating the Application Services Database for SQL Server
http://msdn.microsoft.com/en-us/library/x28wfk74.aspx

 

Enjoy it !

Leandro Ribeiro

Tags: , , , , , ,

Adicionando arquivos MDF(SQL Server Database) no Visual Studio 2008

Muitas pessoas já passaram pelo problema de não conseguir inserir arquivos de dados (mdf) na pasta App_Data do Visual Studio 2005/2008 ou até mesmo 2010.

A mensagem que costuma aparecer é a seguinte.

“Connections to sql server files (*.mdf) require sql server express 2005 to function properly. Please verify the installation of the component or download from the url: http://go.microsoft.com/fwlink/?LinkId=49251”

Muitas soluções são propostas pela internet, mas a solução definitiva é mais simples do que se pensa.

Acontece que a maioria das pessoas alteração o nome da instância do SQL Server instalada, por exemplo, quando você instala o SQL Server Express 2008 é costuma colocar o nome da instância como SQLEXPRESS2008 ou quando é o SQL Server Express 2005 fica SQLEXPRESS2005.

Quando você faz essa alteração o Visual Studio “fica cego”, eu acho que isso é uma falha grosseira na implementação do Visual Studio, mas não vamos entrar no mérito da questão, eis a alteração necessária para corrigir o problema.

Tools > Options > Database Tools > Data Connections

Em SQL Server Instance Name digite o nome correto da sua instância, no meu caso ficará SQLEXPRESS2008.

Antes (clique na imagem para ampliar)

Visual Studio 2008 Database Settings

Visual Studio 2008 Database Settings

Depois (clique na imagem para ampliar)

Visual Studio 2008 Database Settings

Visual Studio 2008 Database Settings

Pronto agora você já pode adicionar seus arquivos de dados na pasta App_Data do seu WebSite.

Espero que tenha ajudado!

att.
Leandro Ribeiro

Tags: , , , , , , ,

Como descobrir/exibir as instâncias do SQL Server instaladas

Camaradas,

Recentemente precisei descobrir qual o nome da instância do SQL Server instalada na máquina de um cliente meu, só que meu cliente não sabia como buscar essa informação.

Eu já conhecia o utilitário de linha de comando do SQL Server (sqlcmd) , só que até então só sabia utiliza-ló acessando através do usário e senha.

Pois então eu descobri que existe o parametrô -L, que exibe os nomes das instâncias instaladas na máquina.

Basta então utilizar o prompt de comando, digitando SQLCMD -L e você terá um resultado semelhante a esse.

Refêrencias:
http://mssqlonline.blogspot.com/2009/03/sql-server-find-all-servers-from-local.html
http://blog.sqlauthority.com/2009/03/18/sql-server-find-all-servers-from-local-network-using-sqlcmd/

Até a próxima!
Leandro Ribeiro

Tags: , , ,

Script de Criação de Tabelas Estados/Cidades Brasileiras

O script anexo contém código SQL para criação e “população” de tabelas na estrutura Pais/Estado/Cidade do Brasil.

Após a execução do script será gerado 3 tabelas contendo,1 país, 27 estados e 5507 cidades.

Clique aqui: Cidades e Estados do Brasil

Referência: http://www.comunidade-firebird.org/modules.php?name=Downloads&d_op=viewdownloaddetails&lid=148&ttitle=Brasil_-_Estados_e_Cidades

Tags: , , , , , , ,

Acessando remotamente o banco de dados SQL Server Express

Como configurar o acesso remoto o banco de dados SQL Server Express 2005/2008.

Vamos aos passos:

  1. Primeiro vamos acessar o aplicativo de configuração do SQL Server, vá em Iniciar –> Programas –> Microsoft SQL Server 2008 –> Configuration Tools –> SQL Server Configuration Manager
  2. No SQL Server Configuration Manager, selecione SQL Server Services na janela a esquerda. Se o status do SQL Server Browser não estiver rodando, você tem que configurar e iniciar o serviço. Do contrário vá para o passo 6;
  3. Dê um clique duplo em SQL Server Browser, a janela Properties(Propriedades) irá aparecer. Configure a conta do serviço para Local Service(Serviço Local);
  4. Vá para a aba Service(Serviço) ainda na janela de propriedades, altere o Start Mode(Modo de início) para Automatic(Automático); Depois disso o serviço irá iniciar automaticamente quando o computador iniciar; Clique em OK para confirmar as alterações.
  5. Volte ao SQL Server Configuration Manager, na janela à direita clique com o botão direito sobre o SQL Server Browser e escolha a opção Start(Iniciar) para iniciar o serviço;
  6. Na janela a esquerda expanda SQL Server Network Configuration –> Protocols SQLExpress, você verá que o protocolo TCP/IP está desabilitado;
  7. Clique com o botão direito em cima do protocolo TCP/IP e selecione a opcão habilitar;
  8. Uma janela aparecerá informando que você deve reiniciar o serviço SQL Service para aplicar as alterações;
  9. Na janela à esquerda selecione SQL Server Services; Na janela à direita clique com o botão direito em SQL Server (SQLEXPRESS) e escolha e opcão Restart(Reiniciar), e então o serviço será reiniciado;
  10. Abra o SQL Server Management Studio e conecte ao SQL Server 2005/2008 Express;
  11. Clique com o botão direito em cima da instância do SQL Service e selecione Properties(Propriedades);
  12. Com a janela de Propriedades abertas selecione Security(Segurança) na coluna à esquerda, após na coluna a direita selecione SQL Server and Windows Authentication Mode (SQL Server e Modo de Autenticação Windows);
  13. Será exibido uma janela informando que é necessário reiniciar o serviço para aplicar as alterações;
  14. Clique com o botão direito em cima da instância do SQL Service, e escolha a opção restart(reiniciar);
  15. Após isso seu servidor já estará habilitado para conexões remotas.

Divirta-se.

Para ver esse artigo com as figuras ilustrativas, basta acessar o endereço fonte desse artigo em inglês.

Referências: http://www.linglom.com/2009/03/28/enable-remote-connection-on-sql-server-2008-express/

Tags: , , , ,

Adicionando usuários no SQL Server

Há quem goste de fazer tudo por interface gráfica, porém ao fazer dessa forma você perde a oportunidade de automatizar tarefas, por exemplo dizer que você tenha que criar 30 usuários, você irá fazer tudo manualmente ?

Eu prefiro script assim toda vez que eu precisar basta mudar o login e pronto, está feito!

Segue um script de exemplo.

Nesse exemplo eu estou criando o usuário e dando acesso de (INSERT, UPDATE, SELECT, DELETE) através das ROLES ‘DB_DATAREADER’ e ‘DB_DATAWRITER’.

Código Exemplo

CREATE LOGIN usuario1
WITH PASSWORD = 'usuario1'
GO 

USE [TesteBD]

CREATE USER usuario1 FOR LOGIN usuario1
WITH DEFAULT_SCHEMA = [TesteBD]
GO

EXEC SP_ADDROLEMEMBER 'DB_DATAREADER', 'usuario1'
EXEC SP_ADDROLEMEMBER 'DB_DATAWRITER', 'usuario1'

GO

Divirta-se!

Tags: , , , ,

Obtendo lista de tabelas por trecho do nome no SQL Server

Para obter uma lista de tabelas existentes através de um trecho do nome é simples assim.

Por exemplo você sabe que o nome de uma tabela contém PESSOA mas não sabe o nome completo, basta alterar o trecho TRECHO_DO_NOME por PESSOA e pronto, você vai ter uma lista com o nome completo de todas as tabelas que contenham a palavra PESSOA.

SELECT *
FROM DBO.SYSOBJECTS
WHERE
 NAME LIKE '%TRECHO_DO_NOME%'
 AND XTYPE='U'

Divirta-se!

Tags: ,