Translate

Mostrando postagens com marcador SQL Server. Mostrar todas as postagens
Mostrando postagens com marcador SQL Server. Mostrar todas as postagens

sábado, 25 de agosto de 2012

Dias da Semana entre SQL Server e Firebird

A função que retorna o dia da semana no SQL Server e Firebird tem resultados diferentes.

Firebird:
SELECT
  EXTRACT(WEEKDAY FROM CAST('19.08.2012' AS DATE)) AS Domingo,
  EXTRACT(WEEKDAY FROM CAST('20.08.2012' AS DATE)) AS Segunda,
  EXTRACT(WEEKDAY FROM CAST('21.08.2012' AS DATE)) AS Terca,
  EXTRACT(WEEKDAY FROM CAST('22.08.2012' AS DATE)) AS Quarta,
  EXTRACT(WEEKDAY FROM CAST('23.08.2012' AS DATE)) AS Quinta,
  EXTRACT(WEEKDAY FROM CAST('24.08.2012' AS DATE)) AS Sexta,
  EXTRACT(WEEKDAY FROM CAST('25.08.2012' AS DATE)) AS Sabado
FROM RDB$DATABASE
O resultado para o Firebird foi:
0 - Domingo; 1 - Segunda; 2 - Terça; 3 - Quarta; 4 - Quinta; 5 - Sexta; 6 - Sábado;

SQL Server: Sem alterar a configuração do DATEFIRST.
USE NOME_BANCO
GO
SELECT
  @@DATEFIRST
SELECT 
  DATEPART(WEEKDAY, '2012-08-19') AS Domingo,
  DATEPART(WEEKDAY, '2012-08-20') AS Segunda,
  DATEPART(WEEKDAY, '2012-08-21') AS Terça,
  DATEPART(WEEKDAY, '2012-08-22') AS Quarta,
  DATEPART(WEEKDAY, '2012-08-23') AS Quinta,
  DATEPART(WEEKDAY, '2012-08-24') AS Sexta,
  DATEPART(WEEKDAY, '2012-08-25') AS Sábado
O resultado para o SQL Server foi:
1 - Domingo; 2 - Segunda; 3 - Terça; 4 - Quarta; 5 - Quinta; 6 - Sexta; 7 - Sábado;

SQL Server: Alterando a configuração do DATEFIRST para 4.
USE NOME_BANCO
GO
SET DATEFIRST = 4
SELECT 
  DATEPART(WEEKDAY, '2012-08-19') AS Domingo,
  DATEPART(WEEKDAY, '2012-08-20') AS Segunda,
  DATEPART(WEEKDAY, '2012-08-21') AS Terça,
  DATEPART(WEEKDAY, '2012-08-22') AS Quarta,
  DATEPART(WEEKDAY, '2012-08-23') AS Quinta,
  DATEPART(WEEKDAY, '2012-08-24') AS Sexta,
  DATEPART(WEEKDAY, '2012-08-25') AS Sábado
O resultado para o SQL Server foi diferente do anterior:
4 - Domingo; 5 - Segunda; 6 - Terça; 7 - Quarta; 1 - Quinta; 2 - Sexta; 3 - Sábado;

SQL Server: Solução ideal quando você não quer que o DATEFIRST influencie nos resultados.
USE NOME_BANCO
GO
SET DATEFIRST = 7 -- Padrão
SELECT 
  (DATEPART(DW, '2012-08-19') + @@DATEFIRST) % 7 as Domingo,
  (DATEPART(DW, '2012-08-20') + @@DATEFIRST) % 7 as Segunda,
  (DATEPART(DW, '2012-08-21') + @@DATEFIRST) % 7 as Terça,
  (DATEPART(DW, '2012-08-22') + @@DATEFIRST) % 7 as Quarta,
  (DATEPART(DW, '2012-08-23') + @@DATEFIRST) % 7 as Quinta,
  (DATEPART(DW, '2012-08-24') + @@DATEFIRST) % 7 as Sexta,
  (DATEPART(DW, '2012-08-25') + @@DATEFIRST) % 7 as Sábado

SET DATEFIRST = 4
SELECT 
  (DATEPART(DW, '2012-08-19') + @@DATEFIRST) % 7 as Domingo,
  (DATEPART(DW, '2012-08-20') + @@DATEFIRST) % 7 as Segunda,
  (DATEPART(DW, '2012-08-21') + @@DATEFIRST) % 7 as Terça,
  (DATEPART(DW, '2012-08-22') + @@DATEFIRST) % 7 as Quarta,
  (DATEPART(DW, '2012-08-23') + @@DATEFIRST) % 7 as Quinta,
  (DATEPART(DW, '2012-08-24') + @@DATEFIRST) % 7 as Sexta,
  (DATEPART(DW, '2012-08-25') + @@DATEFIRST) % 7 as Sábado
O resultado para o SQL Server foi:
1 - Domingo; 2 - Segunda; 3 - Terça; 4 - Quarta; 5 - Quinta; 6 - Sexta; 0 - Sábado;
1 - Domingo; 2 - Segunda; 3 - Terça; 4 - Quarta; 5 - Quinta; 6 - Sexta; 0 - Sábado;

SQL Server: Para ter o mesmo resultado do Firebird.
USE NOME_BANCO
GO
SELECT 
  (DATEPART(DW, '2012-08-19') + @@DATEFIRST - 1) % 7 as Domingo,
  (DATEPART(DW, '2012-08-20') + @@DATEFIRST - 1) % 7 as Segunda,
  (DATEPART(DW, '2012-08-21') + @@DATEFIRST - 1) % 7 as Terça,
  (DATEPART(DW, '2012-08-22') + @@DATEFIRST - 1) % 7 as Quarta,
  (DATEPART(DW, '2012-08-23') + @@DATEFIRST - 1) % 7 as Quinta,
  (DATEPART(DW, '2012-08-24') + @@DATEFIRST - 1) % 7 as Sexta,
  (DATEPART(DW, '2012-08-25') + @@DATEFIRST - 1) % 7 as Sábado
O resultado para o SQL Server foi:
0 - Domingo; 1 - Segunda; 2 - Terça; 3 - Quarta; 4 - Quinta; 5 - Sexta; 6 - Sábado;
O resultado para o Firebird foi:
0 - Domingo; 1 - Segunda; 2 - Terça; 3 - Quarta; 4 - Quinta; 5 - Sexta; 6 - Sábado;

Muito cuidado para quem está migrando de banco, espero que você tenha testes para isso :)

Fonte:
- http://blog.sqlauthority.com/2007/04/22/sql-server-datefirst-and-set-datefirst-relations-and-usage
- www.kodyaz.com/articles/get-week-day-name-of-date-using-t-sql.aspx

quarta-feira, 22 de agosto de 2012

Desabilitar e Habilitar Trigger no SQL Server

Essa semana eu precisei fazer uma manutenção no banco de dados de um cliente novo, que por engano, acabou cadastrando dados da empresa "A" na empresa "B", até então uma tarefa simples se não tivesse uma Trigger no meio da história que mantém uma determinada data atualizada conforme a regra de negócio do sistema.

Após executar o script abaixo no ambiente de testes, ocorreu um alerta no SSMS: Warning: Null value is eliminated by an aggregate or other SET operation e o campos em questão havia ficado zerado, ou seja, bug!

Entendendo melhor o comportamento da Trigger, a solução foi desabilitar e habilitar a trigger durante a execução do script, fiocu assim:
USE NOME_BANCO
GO

DECLARE @EMPRESA_ORIGEM UNIQUEIDENTIFIER ='{E79572FB-80EF-44E7-ACD5-F8771AFCBA8D}';
DECLARE @EMPRESA_DESTINO UNIQUEIDENTIFIER ='{E03E1A64-AC16-4CD3-AB87-CF2A62264D22}';

-- Desabilita a Trigger 
ALTER TABLE TABELA DISABLE TRIGGER TABELA_AIUD0;

-- Move os dados para outra empresa
UPDATE TABELA SET EMPRESA_ID = @EMPRESA_DESTINO WHERE EMPRESA_ID = EMPRESA_ORIGEM;

-- Habilita a Trigger
ALTER TABLE TABELA ENABLE TRIGGER TABELA_AIUD0;

terça-feira, 17 de abril de 2012

SQL Prompt 5 para SQL Server Management Studio

O SQL Prompt da Red-Gate é uma ferramenta que se integra com o SQL Server Managemente Studio com objetivo de aumentar a produtividade através do seu poderoso code-complete, code-snippets e formatação de código (útil para padronizar o código facilitando diff no controle de versão e reviews).

O inteligente (intelisense) consegue carregar os campos que você precisa, segue um exemplo do relacionamento entre as tabelas Pedidos e Itens de Pedidos, após digitar inner join on é listado a opção de relacionamento:

Aproveite para testar a versão trial por 14 dias e boa sorte.

domingo, 21 de março de 2010

Community Launch - Campinas

Neste último sábado, participei Community Launch em Campinas, evento realizado pela Microsoft cujo objetivo é apresentar as novidades das ferramentas e divulgar a copa de talentos. Este evento foi realizado em várias cidades do Brasil e o conteúdo foi separado em Infra e Desenvolvimento.

Eu participei das palestras de SQL Server 2008 R2 e Visual Studio 2010, abaixo segue um resumo do que foi visto:

SQL Server 2008 R2:
  • Integration Server: Melhorias na questão de importação de dados, com suporte a FTP, Oracle e Office, informando o status de importação e feedback;
  • Analysis Services: Análise de performance com data mining nativo, permitindo identificar por exemplo, qual produto é mais comprado por cliente em determinada época de ano;
  • Reporting Server: Ferramenta de relatório integrada com Visual Studio e Share Point com ótimos gráficos, inclusive com integração a mapas, como do Google Analytics.
  • Pervasive Insight: Integração com Office, permitindo que uma planilha realize consultas do banco, reduzindo trabalho do programador e ampliando o poder para o usuário final, aumentando a eficiência da equipe de TI;
  • Suporte a 256 Core e processamento paralelo para até 100TB, só que para isso é necessário adquirir hardware específico: HP, Dell e Bull;
  • Transparent Data Encrypt: Evita que o backup possa ser restaurado em qualquer servidor sem permissão, utiliza uma espécie de assinatura digital;
  • Data Compression: Permite salvar os dados compactados, apesar de parecer mais lento, os engenheiros da Microsoft disseram que o gargalo é a leitura e gravação dos dados, portanto, é mais rápido ler ou gravar a informação compactada e descompactar em memória do que ler ou gravar sem compactação;
  • Resource Governor: Permite determinar o recurso de hardware por usuário. Ex: Usuário "star (estagiário)" terá 2% de CPU e 5% de memória, já o "Diretor" terá 50% de CPU e 50% de memória.
  • Policy-Based Manager: Permite criar regras no banco para evitar que usuário saia criando procedures ou triggers;
  • Integração com .Net: Permite utilizar funcionalidades desenvolvidas em C# junto com o banco de dados;
  • FileStream Data Type: Uma opção para salvar foto ou vídeo no banco de dados, porém ao invés de salvar diretamente no banco (db.mdf), será salvo em uma pasta no HD, só que o gerenciamento será feito pelo SQL Server, no caso de um backup, todo conteúdo será embutido para ser restaurado posteriomente;
  • Full Text Search: Suporte a Português PT-BR;
  • Intellisense: Adicionado;
  • SQL Express: Limitação até 4GB para o banco de dados, 1 processador e 1 GB de memória.

Visual de Studio 2010:
  • Threads Sincronizadas;
  • Plugins: Permite referenciar plugings através de assembly local (nossos) ou externo (terceiros);
  • IDE: Leitura de arquivo dump, informando a seqüência dos métodos (call stack) e característica de variáveis e objetos no momento da excetion.