Posts Tagged sql

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: , ,

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: , , ,

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: ,

Tamanho de tabelas no SQL Server

Script simples porém muito útil então resolvi postar.

Não me recordo da fonte…
Quando relembrar faço referência.

SELECT OBJECT_NAME(ID) TABELA, CONVERT(DEC(15),SUM(RESERVED)) RESERVED
INTO #X
FROM SYSINDEXES
WHERE indid in (0, 1, 255)
GROUP BY ID

SELECT TABELA, LTRIM(STR(RESERVED * D.LOW / 1024., 15, 0)) + ' KB'
FROM #X, master.dbo.spt_values d
where d.number = 1
and d.type = 'E'
ORDER BY RESERVED DESC

Divirta-se!

Tags: , , ,

Definindo Estratégia de Modelo de Recuperação para Banco de Dados SQL Server

Recentemente trabalhei em um projeto de milhões de dados, tanto no ambiente de desenvolvimento ou de produção.

O resultado foi que em algumas semanas o servidor de desenvolvimento “estourou”, metaforicamente falando claro. Identificamos que as bases de dados estavam com 30GB cada uma, resultado de uma má estratégia de modelo de recuperação (backup).

Procurando na internet encontrei um artigo interessante sobre o assunto, pode ser lido em: www.devmedia.com.br/articles/viewcomp.asp?comp=6458

O resumo seria o seguinte…

SIMPLE (Ideial para Desenvolvimento!)

O log de transações (Transaction Log) é usado muito pouco neste modelo de recuperação. De fato, quase nada é registrado no log. Isto significa dizer que a escolha em usar este modelo para seus banco de dados só será possível recuperar o último backup.

BULK-LOGGED

Este modelo registra muito mais informação no log de transações do que o modelo SIMPLE. A única informação não registrada são operações de volume como: SELECT INTO, BCP, BULK INSERT,CREATE INDEX e operações com os tipos de dados texto e ntext. Isto significa que você pode recuperar a maior parte dos dados no caso de algum problema, porém só as operações citadas serão perdidas.

FULL (Sempre em produção!)

Este modelo de recuperação informa ao SQL Server que você quer realizar também o backup de log de transações. Para tornar isso possível, o SQL Server mantém todas as transações em um log de transações até que um backup do log de transações ocorra. Quando o backup do log de transações acontece, o SQL Server trunca o log de transações depois que o backup é gravado no dispositivo de backup.

Fonte:
www.devmedia.com.br/articles/viewcomp.asp?comp=6458

Tags: , , ,