Utilizando a função COALESCE no SQL Server 2008

Dica – Utilizando a função COALESCE no SQL Server 2008.

Anúncios

A dica de hoje tem a objetivo de apresentar e demonstrar como podemo utilizar a função COALESCE e qual a sua função.

Através desta função o SQL Server realiza uma análise com base nos valores informados ou passados para os argumentos descritos na função. Desta forma, o COALESCE identifica dentro deste conjunto de argumentos, o primeiro a possuir valores não nulo, fazendo uma análise similar da função ISNULL.

Os argumentos passados para a função COALESCE são reconhecidos e tratados como expressões, validados e consistidos de forma individual.

Normalmente a função COALESCE, deverá retorna o tipo de dados de expressão com a precedência de tipo de dados mais alta. Se todas as expressões forem não anuláveis (nonnullable), o resultado será digitado como nonnullable, ou seja, se todos os argumentos não possuirem valores nulos, o SQL Server vai retornar como valor a mensagem Not Null. Caso contrário todos os argumentos e seus valores sejam considerados e identificados como valores nulos, o SQL Server vai retornar a mensagem de Null.

Podemos também dizer que a função COALESCE, realiza uma análise similar ao comando lógico condicional CASE, fazendo a seguinte verificação:

CASE

   WHEN (expression1 IS NOT NULL) THEN expression1

   WHEN (expression2 IS NOT NULL) THEN expression2

   …

   ELSE expressionN

END

Embora ISNULL e COALESCE sejam equivalentes, podem se comportar de maneira diferente. Uma expressão que envolve ISNULL com parâmetros não nulos é considerada NOT NULL, enquanto as expressões que envolvem COALESCE com parâmetros não nulos são consideradas NULL.

Exemplo: No exemplo a seguir, a tabela wages inclui três colunas que contêm informações sobre o salário anual dos funcionários: valor por hora, salário e comissão. No entanto, um funcionário recebe apenas um tipo de pagamento. Para determinar o valor total pago a todos os funcionários, use a função COALESCE para receber apenas o valor não nulo encontrado em hourly_wage, salary e commission.

   
SET NOCOUNT ON;
GO

IF OBJECT_ID('dbo.wages') IS NOT NULL   
  DROP TABLE wages; 
GO
CREATE TABLE dbo.wages
(
    emp_id        tinyint   identity,
    hourly_wage   decimal   NULL,
    salary        decimal   NULL,
    commission    decimal   NULL,
    num_sales     tinyint   NULL
);
GO

INSERT dbo.wages (hourly_wage, salary, commission, num_sales)
VALUES
    (10.00, NULL, NULL, NULL),
    (20.00, NULL, NULL, NULL),
    (30.00, NULL, NULL, NULL),
    (40.00, NULL, NULL, NULL),
    (NULL, 10000.00, NULL, NULL),
    (NULL, 20000.00, NULL, NULL),
    (NULL, 30000.00, NULL, NULL),
    (NULL, 40000.00, NULL, NULL),
    (NULL, NULL, 15000, 3),
    (NULL, NULL, 25000, 2),
    (NULL, NULL, 20000, 6),
    (NULL, NULL, 14000, 4);
GO

SET NOCOUNT OFF;
GO
SELECT CAST(COALESCE(hourly_wage * 40 * 52,salary,commission * num_sales) AS money) AS 'Total Salary' 
FROM dbo.wages
ORDER BY 'Total Salary';

GO

Itens relacionados: ISNULL  e  CASE.

Espero que você tenha gostado de mais esta dica, simples, prática e que poderá fazer a diferença quando estamos trabalhando com relatórios, listagens de valores, entre outros tipos de situações que necessitamos analisar a consisência dos nossos dados.

Até a próxima.

Entendendo o conceito de Expressões no Microsoft SQL Server

Dica – Entendendo o conceito de Expressões no Microsoft SQL Server.


A dica de hoje tem o objetivo de descrever qual a finalidade e importância em se utilizar Expressões no Microsoft SQL Server.

Então para começar, vou tentar responder a seguinte pergunta:

O que seria uma Expressão?

Podemo dizer que um expressão é a combinação de símbolos e operadores que o Mecanismo de banco de dados do SQL Server avalia para obter um único valor de dados. Expressões simples podem ser uma única constante, variável, coluna ou função escalar. Os operadores podem ser usados para unir duas ou mais expressões simples em uma expressão complexa.

Duas expressões podem ser combinadas por um operador se o operador oferecer suporte para os tipos de dados das duas e pelo menos uma destas condições for verdadeira:

  • As expressões têm o mesmo tipo de dados.
  • O tipo de dados com a menor precedência pode ser implicitamente convertido em tipo de dados com a maior precedência de tipo de dados.

Se as expressões não atenderem a essas condições, as funções CAST ou CONVERT poderão ser usadas para converter explicitamente o tipo de dados de menor precedência em qualquer tipo de dados de maior precedência ou em um tipo de dados intermediário que possa ser implicitamente convertido no tipo de dados com a maior precedência.

Se não houver nenhuma conversão implícita ou explícita com suporte, as duas expressões não poderão ser combinadas.

O agrupamento de qualquer expressão avaliada como uma cadeia de caracteres é definido seguindo as regras de precedência de agrupamento. Em uma linguagem de programação como C ou Microsoft Visual Basic, uma expressão é avaliada sempre como um único resultado. As expressões em uma lista de seleção Transact-SQL seguem uma variação nessa regra: a expressão é avaliada individualmente para cada linha no conjunto de resultados.

Uma única expressão pode ter um valor diferente em cada linha do conjunto de resultados, mas cada linha tem apenas um valor para a expressão.

Por exemplo, na seguinte instrução SELECT, as referências a ProductID e ao termo 1+2 na lista de seleção são expressões:

USE AdventureWorks2008R2;
GO
SELECT ProductID, 1+2
FROM Production.Product;
GO

A expressão 1+2 é avaliada como 3 em cada linha do conjunto de resultados. Embora a expressão ProductID gere um valor exclusivo em cada linha de conjunto de resultados, cada linha tem apenas um valor para ProductID.

Termo Definição
constant É um símbolo que representa um valor de dados único e específico. Para obter mais informações, consulte Constantes (Transact-SQL) no Books On-Line.
scalar_function É uma unidade de sintaxe Transact-SQL que fornece um serviço específico e retorna um único valor. scalar_function podem ser funções escalares internas, como as funções SUM, GETDATE ou CAST, ou funções escalares definidas pelo usuário.
[ table_name.] É o nome ou alias de uma tabela.
column É o nome de uma coluna. Somente o nome da coluna é permitido em uma expressão.
variable É o nome de uma variável ou um parâmetro. Para obter mais informações, consulte DECLARE @local_variable (Transact-SQL) no Books On-Line.
( expression ) É qualquer expressão válida conforme definido neste tópico. Os parênteses são operadores de agrupamento que verificam se todos os operadores na expressão entre parênteses são avaliados antes de a expressão resultante ser combinada com outra.
( scalar_subquery ) É uma subconsulta que retorna um valor. Por exemplo:

SELECT MAX(UnitPrice)

FROM Products

{ unary_operator } É um operador que tem somente um operando numérico:

  • + indica um número positivo.
  • – indica um número negativo.
  • ~ indica o operador de complemento.

Os operadores unários podem ser aplicados somente a expressões que avaliam qualquer um dos tipos de dados da categoria de tipo de dados numérico.

{ binary_operator } É um operador que define a forma como duas expressões são combinadas para gerar um único resultado. binary_operator pode ser um operador aritmético, o operador de atribuição (=), um operador bit a bit, um operador de comparação, um operador lógico, o operador de concatenação de cadeia de caracteres (+) ou um operador unário. Para obter mais informações sobre operadores, consulte Operadores (Transact-SQL) no Books On-Line.
ranking_windowed_function É qualquer função de classificação Transact-SQL. Para obter mais informações, consulte Funções de classificação (Transact-SQL) no Books On-Line.
aggregate_windowed_function É qualquer função de agregação Transact-SQL com a cláusula OVER. Para obter mais informações, consulte Cláusula OVER (Transact-SQL) no Books On-Line.

Resultados da expressão

Em uma expressão simples composta de uma única constante, variável, função escalar ou nome de coluna: o tipo de dados, agrupamento, precisão, escala e valor da expressão é o tipo de dados, agrupamento, precisão, escala e valor do elemento referenciado.

Quando duas expressões são combinadas usando operadores lógicos ou de comparação, o tipo de dados resultante é booliano e o valor é um dos seguintes: TRUE, FALSE ou UNKNOWN.

Quando duas expressões são combinadas usando operadores aritméticos, bit a bit ou de cadeia de caracteres, o operador determina o tipo de dados resultante.

Expressões complexas compostas de muitos símbolos e operadores são avaliadas como um único resultado avaliado. O tipo de dados, o agrupamento, a precisão, a escala e o valor da expressão resultante são determinados pela combinação das expressões de componentes, duas de cada vez, até o resultado final ser alcançado.

A sequência na qual as expressões são combinadas é definida pela precedência dos operadores na expressão.

Itens relacionados: CASE, CAST e CONVERT, COALESCE, Precedência de tipo de dados, Tipos de dados e Funções.

Espero que esta pequena dica possa ter desvendado de forma simplista um dos argumentos mais utilizados, comentados e que poucos entendem o seu significado.

Até a próxima.

Código-fonte de antivírus vaza na Web

Responsável é ex-funcionário da Kaspersky, O código-fonte do popular Kaspersky Anti-Virus vazou recentemente na Web e já pode ser encontrado na rede BitTorrent e em diversos sites de compartilhamento de arquivos.


O código-fonte do popular Kaspersky Anti-Virus vazou recentemente na Web e já pode ser encontrado na rede BitTorrent e em diversos sites de compartilhamento de arquivos.

O código-fonte havia sido roubado dos laboratórios da Kaspersky em 2008 por um ex-funcionário da empresa. Este ex-funcionário tentou vender o código no mercado negro, mas acabou preso por três anos acusado de roubo de propriedade intelectual.

O código-fonte roubado inclui informações sobre o engine antivírus e sobre os módulos anti-phishing, anti-dialer, anti-spam, controle para pais e outros.

De acordo com a Kasperky, o código-fonte vazado não representa nenhum risco para os usuários da versão mais recente do Kaspersky Anti-Virus.

A empresa informou que o código é de apenas uma parte do programa e que desde seu roubo, a maioria dos módulos foi atualizada ou reescrita.

Embora o código já tenha cerca de três anos, ele não deixa de ser algo valioso para os criadores de malwares, já que o Kaspersky Anti-Virus tem hoje cerca de 5% do mercado de softwares antivírus.

Fonte e Direitos Autorais: Baboo.com, 31/01/2011 08:10h.

Migração para o WinServer 2008 R2

A Microsoft disponibilizou uma série de vídeos com instruções detalhadas para profissionais e empresas com o Windows Server 2003 e que desejam migrar para o Windows Server 2008 ou Windows Server 2008 R2.


A Microsoft disponibilizou uma série de vídeos com instruções detalhadas para profissionais e empresas com o Windows Server 2003 e que desejam migrar para o Windows Server 2008 ou Windows Server 2008 R2.

Os vídeos estão divididos em quatro categorias:

– Descubra
Verifique seus serviços existentes e prepare sua infraestrutura para receber o Windows Server 2008.

– Explore os Recursos
Aprenda a preparar seu domínio para receber o Windows Server 2008.

– Implante
Faça as verificações da migração para Windows Server 2008 necessárias para assegurar a saúde do seu ambiente.

– Evolua
Se você já possui o Windows Server 2008 e quer migrar para Windows Server 2008 R2 é bem simples. Conheça os procedimentos para se fazer isso.

Para ver a série de vídeos, clique aqui.

Fonte e Direitos Autorais: Baboo.com.

Lucro líquido da VMware cresce 81,3%

A VMware, empresa especialista em soluções para virtualização, informou recentemente que seu lucro líquido total chegou a US$ 357,44 milhões em 2010, um crescimento de 81,3% em relação aos US$ 197,09 milhões registrados em 2009.


A VMware, empresa especialista em soluções para virtualização, informou recentemente que seu lucro líquido total chegou a US$ 357,44 milhões em 2010, um crescimento de 81,3% em relação aos US$ 197,09 milhões registrados em 2009.

Já a receita da empresa no ano passado foi de US$ 2,85 bilhões, um crescimento de 41,2% em relação aos US$ 2,02 bilhões conseguidos no ano anterior.

No quarto trimestre de 2010, o lucro líquido da empresa foi de US$ 119,88 milhões, enquanto que a receita chegou a US$ 835,66 milhões.

De acordo com a VMware, estes resultados foram conseguidos graças ao aumento na demanda por soluções de virtualização e computação de nuvem.

Fonte e Direitos Autorais: Baboo.com, 31/01/2011 09:58h.

Câmara deve analisar marco civil neste ano

O Poder Executivo deve enviar à Câmara, em breve, o anteprojeto de lei que trata do marco civil da internet. A proposta, que está atualmente na Casa Civil, define direitos e responsabilidades de usuários e provedores.


O Poder Executivo deve enviar à Câmara, em breve, o anteprojeto de lei que trata do marco civil da internet. A proposta, que está atualmente na Casa Civil, define direitos e responsabilidades de usuários e provedores.

Durante consulta pública sobre o assunto, promovida pelo Ministério da Justiça no ano passado, mais de duas mil contribuições foram recebidas e, em virtude disso, o texto inicial sofreu alterações.

As mudanças dizem respeito à remoção de conteúdo inapropriado da rede. A nova redação do anteprojeto prevê que o provedor de serviço de internet somente poderá ser responsabilizado por danos decorrentes de conteúdo gerado por terceiros se, após ordem judicial, não tomar as providências para, dentro do prazo assinalado, tornar indisponível o material apontado como infringente – por exemplo, crimes contra a honra.

O texto inicial dizia que a notificação sobre o conteúdo inadequado poderia ser feita pelo ofendido, não havendo necessidade de ordem judicial para a remoção de conteúdo. Além disso, estabelecia que o usuário responsável pela publicação do conteúdo poderia contestar o provedor, requerendo a manutenção do conteúdo e assumindo a responsabilidade exclusiva por eventuais danos a terceiros. Essa parte foi excluída do anteprojeto; agora, qualquer contra-argumentação deverá ser feita pela via judicial.

A nova versão do texto determina ainda que as regras para remoção de conteúdo inapropriado deverão ser seguidas também pelos usuários que detenham poderes de moderação sobre o conteúdo de terceiros – donos de blogs, por exemplo.

Apoio

O deputado Paulo Teixeira (PT-SP) considera as alterações feitas no texto positivas. Ele inclusive sugeriu mudanças nesse sentido ao Ministério da Justiça. “Conforme o Direito brasileiro, alterar e remover conteúdo pode significar censura. Isso não deve ser tarefa de um site”, justificou.

O deputado Julio Semeghini (PSDB-SP) também apoia a proposta do governo. “Deve estar no marco civil tudo aquilo que diz respeito à garantia do usuário de ter acesso à internet, à privacidade do cidadão e até mesmo ao anonimato daquele que quiser utilizar a rede de maneira anônima. Além disso, é preciso estabelecer normas sobre a remoção de conteúdo e a responsabilidade do provedor”, explica.

Segundo ele, os parlamentares deverão decidir se as regras para o armazenamento, por parte dos provedores, das informações de conexões dos usuários deverão fazer parte do marco civil ou do projeto de lei sobre crimes digitais (PL 84/99), que tramita em regime de urgência na Câmara.

Privacidade

Já as normas para garantir a privacidade dos cidadãos na internet serão complementadas, segundo o Ministério da Justiça, pelo anteprojeto de lei que trata da proteção de informações pessoais em bancos de dados. O Executivo promoverá consulta pública, até 31 de janeiro, para discutir essa proposta.

Na opinião de Paulo Teixeira, os deputados devem primeiramente aprovar o marco civil; em seguida, uma lei que defina os crimes digitais; e, por último, a legislação que objetiva proteger os dados pessoais, completando assim a regulação da internet.

Fontes e Direitos Autorais: Agência Câmara Segunda-feira, 31 de janeiro de 2011 – 11h22.

Twitter defende liberdade de expressão no Egito

O Twitter divulgou um manifesto na última sexta-feira apoiando o livre fluxo de mensagens e pensamento na internet.


Twitter defende liberdade de expressão no Egito
Populares têm usado a rede para denunciar arbitrariedades e organizar manifestações contra o governo

O Twitter divulgou um manifesto na última sexta-feira apoiando o livre fluxo de mensagens e pensamento na internet.

Denominado “The tweets must flow” (Os tuítes devem fluir), o texto vem à tona no mesmo momento em que o governo do Egito bloqueia a internet no país como forma de restringir manifestações online de pensamento da população.

Assinado pelo cofundador do Twitter, Biz Stone, e pelo conselheiro da empresa, Alexander Macgillivray, o manifesto afirma que o objetivo to Twitter é “conectar as pessoas instantaneamente em todos os lugares em torno daquilo que é mais significativo para elas. Para que isso aconteça, a liberdade de expressão é essencial”, afirmaram.

“Alguns tuítes podem facilitar uma mudança positiva em um país reprimido, alguns podem nos fazem rir, alguns nos fazem pensar (…). Nós nem sempre concordamos com o que as coisas que as pessoas tuítam, mas mantemos o fluxo de informações, independentemente de qualquer opinião que possamos ter sobre o conteúdo”, completaram eles.

Na última sexta-feira, o governo do Egito, liderado pelo presidente Hosni Mubarak, cortou parte das conexões com a internet do país e a troca de mensagens via SMS. O objetivo era reprimir a divulgação e a organização das manifestações populares que tomaram conta das ruas do país. Mubarak está no poder há 30 anos. Antes, o acesso ao Twitter já havia sido bloqueado.

No início do mês, manifestações parecidas aconteceram na Tunísia. Os protestos resultaram na derrubada do ex-presidente Zine El Abidine Ben Ali após 23 anos no poder.  Os protestos contaram com ampla adesão, organização e divulgação por meio das redes sociais.

Fonte e Direitos Autorais: Vinicius Aguiari, de INFO Online Segunda-feira, 31 de janeiro de 2011 – 10h52.