Aplicando Tratamento de Erros no Microsoft SQL Server 2012 e 2014 – Utilizando o Comando THROW.


Bom tarde, Comunidade e Amantes do Microsoft SQL Server.

Tudo bem? No último mês de Abril a Microsoft lançou a última versão do Microsoft SQL Server, conhecida como 2014, que internamente é tratada como versão de número 12. Mas ainda estou focado em evoluir o meu conhecimento e experiência na versão 2012, que particularmente foi que mais apresentou evolução e melhorias consideráveis desde a versão 2000.

Por isso, nos últimos dias, estava estudando um mais sobre Tratamento de Erros e Exceções no SQL Server, e tive a oportunidade de utilizar e aplicar o comando THROW, introduzido a partir da versão 2012. Por isso, decidi compartilhar com vocês um pouco mais sobre este comando, destacar algumas diferenças em relação a alternativas como o comando RAISERROR, existente desde a versão 2000 do Microsoft SQL Server.

Como de costume, vou realizar uma pequena Introdução sobre este comando, sua forma de uso, uma comparação básica em relação ao comando RAISERROR e alguns exemplos de utilização do comando THROW.

 

Introdução

Implementado a partir da versão 2012 do Microsoft SQL Server, lançado em 2012, a instrução ou comando THROW possibilita ser utilizada como uma funcionalidade que permite ao profissional que esta trabalhando com Banco de Dados, mais especificamente com a linguagem Transact-SQL no desenvolvimento dos seus recursos, aplicarem uma nova técnica de tratamento de erros e controle de exceções.

O comando THROW, não pode ser considerado somente uma melhoria em relação ás formas de identificação e tratamento de erros, o mesmo apresenta comportamentos e características similares ao RAISERROR e @@ERROR, onde o SQL Server retorna possíveis sintomas que representam um erro no processamento da transação.

Mas a sua principal diferença em relação a estas antigas funcionalidades é a possibilidade do comando THROW, apresentar uma mensagem de erro de forma personalizada, como também, que erros oriundos do SQL Server possam ser retornados na aplicação do usuário de forma amigável.

 

Comportamento

A partir do momento que utilizamos o comando THROW, o SQL Server trabalha de uma forma mais versátil não obrigando a necessidade que a mensagem de erro que será apresentada ou retornada esteja necessariamente cadastradas na System Table Sys.Messages.

 

Além disso, uma das obrigatoriedades do comando THROW é que o código de erro que será apresentando deva ser superior a 50000, suas exceções geradas durante a identificação do erro são internamente identificadas com o nível de gravidade de número 16, o que representa e informa para o SQL Server que se trata de um erro de sintaxe ou instrução escrita incorretamente.

 

Considerações

A instrução antes do comando THROW deve ser seguido o terminador de instrução com o uso do sinal de ponto e vírgula (;).

 

Quando o comando THROW for utilizado sem a passagem de argumento ou parâmetro, o mesmo deve ser declarado de forma obrigatória dentro de um bloco CATCH.

 

Caso não exista ou não seja identificado à declaração de um bloco TRY…CATCH a instrução de processamento do comando THROW ou sua sessão será encerrada.

 

Dependência

A partir do Microsoft SQL Server 2005 introduziu o TRY… CATCH para tratar de forma eficaz os erros dentro de uma instrução ou transação T-SQL. Usando um bloco CATCH podemos facilmente escrever o erro manipulação que será executado sempre que ocorrer um problema dentro de um bloco TRY. Por isso o comando THROW também se faz dependente de um bloco TRY…CATCH para lançar e apresentar uma exceção ou erro ao usuário.

 

Sintaxe

O comando THROW, apresenta uma sintaxe de uso muito simples:

 

Sintaxe: THROW erro número, mensagem, estado

 

Argumentos e Parâmetros:

 

  • Número de erro: Valor do tipo inteiro declarado ou passado através de variáveis, constantes ou qualquer outra forma.  Seu valor deve ser do tipo inteiro, maior ou igual a 50000 e menor ou igual ao valor máximo de INT 2147483647.
  •  Mensagem: Este é um valor do tipo string que representa a descrição da exceção. Seu tipo de dados deve ser NVARCHAR, com tamanho máximo de 2048 caracteres.
  • Estado: Valor do tipo Tinyint, declarado entre 0 e 255, obtido através de variáveis, constantes ou qualquer outra forma. Identifica associado à mensagem de erro.

 

Comparativo com o comando RAISERROR

Como toda e qualquer nova funcionalidade, sempre existe alguns cenários ou até mesmo pequenas restrições na utilização de uma novidade. Isso é muito comum, ainda mais quando falamos de um comando ou instrução que possa mudar ou gerar impactos em procedimentos, processos e sistemas que estão em uso a algum tipo.

 

O comando THROW também não fica fora deste cenário, ao contrário o mesmo foi fortemente comparado com o comando RAISERROR em muitos casos até mesmo questionado se a sua implementação seria realmente lançada na versão final do Microsoft SQL Server 2012 e posteriormente mantida. O que normalmente não é adotado pelo Microsoft, lançar um recurso em uma vez e posteriormente remover o mesmo. Basicamente os comandos THROW e RAISERROR apresentam quatro diferenças em sua forma de uso, destacadas na Tabela 1 abaixo:

 

RAISERROR THROW
O valor declarado no argumento msg_id, deve existir obrigatoriamente na System Table Sys.Messages. O valor informado no parâmetro error_number, não precisa existir na System Table Sys.Messages.
O parâmetro msg_str pode conter estilos de formatação printf. O parâmetro message não aceita formatação de estilo printf. Para isso é necessário utilizar a Função FORMATMESSAGE, introduzida também no Microsoft SQL Server 2012.
O parâmetro severity especifica a severidade da exceção. Não existe um argumento ou parâmetro que informa o nível de severidade da exceção ou erro, todo e qualquer transação que o comando THROW faça parte terá o nível número aplicado 16.
Parâmetro Option que permite uma forma personalizada para o registro ou apresentação do erro. Além disso, possibilita que esta exceção ou erro seja registro nos logs do mecanismo de banco de dados. O comando THROW lança a exceção capturada e permite que a mesma seja armazenada internamente em tabelas, mas não envia ou registra o erro em logs do mecanismos de banco de dados.

Tabela 1 – Diferenças entre os comandos RAISERROR e THROW.

 

Perfeito, agora que já conhecemos um pouco mais sobre o comando THROW, podemos trabalhar com alguns exemplos e formas de utilização, você vai poder observar um exemplo que apresenta a forma de uso do comando THROW em comparação com o comando RAISERROR. Então vamos em frente e como diária o poeta “Siga-me os bons…”

 

Formas de Uso

– Exemplo 1 – Lançamento de Exceção sem Try…Catch –

 

THROW 62000, ‘Nova exceção lançada pelo comando THROW.’,2;

THROW

Figura 1 – Mensagem apresentada pelo comando THROW.

 

– Exemplo 2 – Lançando uma Exceção de Erro na divisão de valores por Zero –

Use TempDB

GO

 

CREATE TABLE ErrorHistory

(ErrorTime   DATETIME,

ErrorSeverityLevel VARCHAR(100),

ErrorMessage   VARCHAR(1000))

GO

 

BEGIN TRY

DECLARE @TryDivision int = 10/0

END TRY

BEGIN CATCH

 

INSERT INTO ErrorHistory VALUES(GETDATE(), ERROR_SEVERITY(), ERROR_MESSAGE());

 

THROW 60000,’Erro de Divisão por Zero’,1;

 

END CATCH

GO

 

SELECT * FROM ErrorHistory

GO

THROW2
Figura 2 – Exceção lançada pelo comando THROW armazenada na tabela ErrorHistory.

 

Neste exemplo, realizamos a criação de uma simples tabela chamada de ErrorHistory, que possui a função de armazenar e catalogar as mensagens de erro ou exceções capturadas dentro do bloco CATCH.

 

Você pode observar que ao executar este bloco de código a mensagem de erro apresentando pelo THROW esta em Português, conforme apresenta a Figura 3, mas a mensagem de erro armazenada na tabela esta em inglês, isso já nos permite entender e observar como o THROW pode ser personalizável.

THROW3
Figura 3 – Mensagem personalizada retornada pelo comando THROW.

 

– Exemplo 3 – Lançando uma Exceção – Violação de Chave Primária –

CREATE TABLE dbo.TestComandoTHROW

(ID INT PRIMARY KEY)

 

BEGIN TRY

INSERT dbo. TestComandoTHROW (ID) VALUES(1);

 

– Forçando a ocorrência do erro 2627, violação de chave primária –

INSERT dbo. TestComandoTHROW (ID) VALUES(1);

END TRY

BEGIN CATCH

 

THROW;

END CATCH;

 

Observe que o comando THROW mesmo declarado de forma simples dentro de um bloco CATCH lança a exceção e devolve o controle para o Mecanismo que banco de dados, mas especificamente para sessão que esta processando a transação.

Figura 4 – Mensagem de erro retornada pelo comando THROW.

 

– Exemplo 4 – Utilizando o Comando THROW e Comando RAISERROR –

– Bloco – Comando THROW –

BEGIN TRY

DECLARE @TryDivision int = 10/0

END TRY

BEGIN CATCH

 

THROW 60000,’Erro de Divisão por Zero’,1;

 

END CATCH

GO

– Bloco – Comando RAISERROR –

BEGIN TRY

DECLARE @TryDivision int = 10/0

END TRY

BEGIN CATCH

 

DECLARE @ErrorMessage NVARCHAR(2048),

@ErrorSeverity INT,

@ErrorState INT

 

SELECT @ErrorMessage =ERROR_MESSAGE(),

@ErrorSeverity =ERROR_SEVERITY(),

@ErrorState =ERROR_STATE()

 

RAISERROR (@ErrorMessage, @ErrorSeverity,@ErrorState)

 

END CATCH

GO

 

Neste último exemplo, estou realizando o mesmo procedimento de divisão de um simples valor inteiro por zero, e aplicando o tratamento de erro com os comandos THROW e RAISERROR, note que no primeiro bloco, estamos fazendo a captura e lançamento da exceção sem precisar capturar o código de erro, armazená-lo e posteriormente apresentar, totalmente ao contrário do que é necessário ser feito para o RAISERROR poder tratar e apresentar o erro e a mensagem.

Desta maneira, neste cenário o comando THROW acaba sendo de forma simples, mais prática e inteligente para seu uso.

Conclusão

Não é fácil destacar e apresentar uma nova funcionalidade do SQL Server, ainda mais estas que somente colocando a mão na massa, como é o caso do comando THROW, pode ser realmente ser perceptível, mas acredito que consegui apresentar de forma clara e simples como podemos fazer uso deste novo recurso, principalmente para os Profissionais que trabalham na área de desenvolvimento e á algum tempo já estavam solicitando este tipo de implementação.

Como foi apresentado o comando THROW, em alguns cenários pode ser considerado mais simples e de fácil utilização, sem requerer que sejam utilizados recursos de sistema do SQL Server, como o comando RAISERROR.

Muito comparado e questionado, o comando THROW, veio para ocupar um espaço que sempre existiu no SQL Server desde a versão 2000, que foi melhorado na versão 2005 com o bloco Try…Catch e agora fortalecido, que é justamente o conceito de tratamento de erros e exceções. Eu mesmo durante muito tempo preferia utilizar o comando RAISERROR e até mesma a variável de sistema @@ERROR do que os blocos Try…Catch, por costume e vício, mas nos últimos tempos a partir do momento em que alguns cenários e necessidade se apresentaram o uso das Funções de erro, como por exemplo: Error_State(), Error_Severity() e Error_Message() ficaram tão presentes no meio dia á dia que também, senti um pouco de restrição em usar o THROW.

Algo que não aconteceu com o THROW, pois em uma linha de código conseguimos de forma elegante capturar, tratar e até mesmo personalizar um erro, deixando nossa aplicação, stored procedure e transação mais intuitiva e amigável.

Sou um grande fã desta funcionalidade que a meu ver nas próximas versões do SQL Server, neste caso, se referindo a versões pós SQL Server 2014, tende a crescer muito e ser adotada de forma concreta.

——————————————————————————————————————————-

Agradeço a sua visita, espero que você tenha gostado e que este conteúdo possa te ajudar.

Um grande abraço.

Nos encontramos em breve.

Até mais.

THROW4

Veja 11 frases que nunca devem ser ditas no trabalho


No trabalho, frases ou expressões mal colocadas podem arranhar a imagem de um profissional e trazer riscos para a carreira. Até um comentário feito durante o almoço pode ser usado para determinar o caráter do funcionário, segundo artigo publicado na seção de carreiras do site americano Business Insider.

Segundo Sylvia Ann Hewlett, autora do livro “Executive Presence: The missing link between merit and success” (Presença executiva: O elo perdido entre mérito e sucesso, em tradução livre), três ações mostram se o profissional tem potencial para liderar: como age, como se parece e como fala.

“Cada encontro verbal é uma oportunidade vital para criar e nutrir uma impressão positiva”, diz Sylvia.

Algumas frases, porém, acabam com o profissionalismo. Veja 11 coisas que não devem ser ditas no ambiente de trabalho:

1) “Será que isso faz sentido?”
Em vez de ter a certeza de que está sendo entendido, perguntar isso passa a impressão de que você não entendeu sua própria ideia. Troque a pergunta por: “Quais são suas ideias?”

2) “Isso não é justo”
Simplesmente reclamar de uma injustiça não vai ajudar a mudar a situação. Evitar essa frase mostra que você é proativo e que, em vez de reclamar, procura resolver o problema, sem se lamentar.

3) “Eu não tive tempo”
Caso não tenha tido tempo para finalizar uma tarefa ou tenha esquecido dela, é melhor pedir um prazo maior para cumpri-la. A opção é melhor que dar uma resposta que não vai resolver o problema.

4) “Apenas” ou “só”
Usar as palavras “apenas” ou “só” para encher frases – como “Eu apenas quero verificar” ou “Eu só acho que” – pode parecer inofensivo, mas faz com que você pareça estar sempre na defensiva. Falar com mais autoridade não é um problema.

5) “Mandei e-mail há uma semana”
Se alguém não responder uma mensagem, é seu dever ir atrás e garantir que a informação tenha sido repassada e compreendida. Vale mostrar proatividade e se comunicar em vez de esperar que a outra pessoa assuma a culpa.

6) “Eu odeio ou acho chato”
Insultos não têm lugar no ambiente de trabalho, especialmente quando são dirigidos a uma pessoa específica ou a uma prática da empresa. Quem faz isso fica tachado de juvenil e imaturo.

7) “Isso não é minha responsabilidade”
Mesmo se não for uma tarefa específica sua, ajudar e colaborar com outros colegas mostra disposição para trabalhar em equipe e encarar outros desafios.

8) “Você deveria ter…”
Apontar novos caminhos ajuda mais que apontar falhas ou problemas. Em vez de falar o que o colega poderia ter feito, procure ter uma abordagem positiva e dar dicas sobre como fazer melhor no futuro.

9) “Posso estar errado, mas…”
Ninguém deve reduzir a importância do que fala. Para se posicionar, é preciso evitar esse tipo de frase e apresentar suas ideias, esperando contribuir.

10) “Desculpe, mas…”
Não vale se desculpar por ter algo a dizer. Essa expressão indica que o profissional é “automaticamente” irritante.

11) “Na verdade…”
Começar frase como “Na verdade, é bem ali” ou “Na verdade, você pode fazer desta forma” coloca uma distância entre as pessoas, insinuando que o ouvinte está, de alguma forma, errado. A frase pode ser reformulada para passar uma mensagem mais positiva.

Fonte e Direitos Autorais: G1.com – Concurso e Emprego – 17/07/2014 07h00 - Atualizado em 17/07/2014 08h42

Short Scripts – Julho – 2014


Boa Tarde Comunidade!

Esta chegando ao final mais uma Copa do Mundo, poxa vida passou rápido demais, mas foi óitmo. Mas a vida continua e se Deus permitir próximas Copas do Mundo virão e teremos mais sucesso e felicidades.

Desta forma, e mantendo a tradição vou compartilhar com vocês alguns do Short Scripts que utilizei nos últimos dias e me ajudarem muito.

Neste relação você vai encontrar exemplos e códigos que envolvem os seguintes recursos, comandos e funcionalidades:

  • Bloco Try…Catch;
  • Claúsula Output;
  • Comando Merge;
  • Constraints Default;
  • Função para Formatação de Valores;
  • Função Unpivot;
  • Script para Insert de Dados;
  • Stored Procedure;
  • Tipo de Dados UniqueIdentifier; e
  • XML com Versionamento e Enconding.

Segue abaixo os Short Scripts:

1- Exemplo – Stored Procedure + Comando Merge + Output:

– Criando a Tabela Producao –
Create Table Producao
(ControleProducao Int Identity(1,1) Primary Key,
OrdemProducao Varchar(20) Not Null,
DataProducao DateTime Not Null,
Quantidade Int Not Null)
On [Primary]
Go

– Criando a Stored Procedure P_FindProducao –
Create Procedure P_FindProducao @OrdemProducao VarChar(20), @DataProducao DateTime
As
Begin
Set NoCount On;

Merge Producao As Target
Using (Select @OrdemProducao, @DataProducao) As Source (OrdemProducao, DataProducao)
On (Target.OrdemProducao = Source.OrdemProducao
And Target.DataProducao = Source.DataProducao)
When Matched Then
Update Set Quantidade = Quantidade + 1, DataProducao = GetDate()
When Not Matched Then
Insert (OrdemProducao, DataProducao, Quantidade)
Values(Source.OrdemProducao, Source.DataProducao, 1)
OUTPUT deleted.*, $action, inserted.*;

End
Go

Select * from Producao

Insert Into Producao (OrdemProducao, DataProducao, Quantidade)
Values (1,GetDate(),1),
(2,GetDate(),1),
(3,GetDate(),1)
Exec P_FindProducao 1, ’2014-07-08 10:06:50.297′

 

– Criando a Tabela Producao –
Create Table Producao
(OrdemProducao Varchar(20) Not Null Primary Key Clustered,
DataProducao DateTime Not Null,
Quantidade Int Not Null)
On [Primary]
Go

2 – Exemplo – Stored Procedure + Comando Merge + Output + Try….Catch:

– Criando a Stored Procedure P_FindProducao –
Create Procedure P_FindProducao @OrdemProducao VarChar(20), @DataProducao DateTime
As
Begin
Set NoCount On;

Begin Try

Merge Producao As Target
Using (Select @OrdemProducao, @DataProducao) As Source (OrdemProducao, DataProducao)
On (Target.OrdemProducao = Source.OrdemProducao
And Target.DataProducao = Source.DataProducao)
When Matched Then
Update Set Quantidade = Quantidade + 1, DataProducao = GetDate()
When Not Matched Then
Insert (OrdemProducao, DataProducao, Quantidade)
Values(Source.OrdemProducao, Source.DataProducao, 1);

End Try

Begin Catch

SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState,
ERROR_PROCEDURE() AS ErrorProcedure,
ERROR_MESSAGE() AS ErrorMessage,
ERROR_LINE() AS ErrorLine;

End Catch
End
Go

Select * from Producao

Insert Into Producao (OrdemProducao, DataProducao, Quantidade)
Values (1,GetDate(),1),
(2,GetDate(),1),
(3,GetDate(),1)
Exec P_FindProducao 3, ’2014-07-08 10:26:25.250′

3 – Exemplo – Utilizando – UniqueIdentifier + Default +NewSequentialID:

Create TAble T1
(Codigo UniqueIdentifier Primary Key Default NEWSEQUENTIALID(),
Descricao varchar(100))
Insert into t1 (Descricao)
Values (CONVERT(Varchar(100), NewID()))
Go 10000

4 – Exemplo – Stored Procedure – Script de Insert:

if exists (select * from sysobjects where id = object_id(N’[dbo].[sp_CreateDataLoadScript]‘) and OBJECTPROPERTY(id, N’IsProcedure’) = 1)
drop procedure [dbo].[sp_CreateDataLoadScript]
GO

Create Procedure sp_CreateDataLoadScript
@TblName varchar(128)
as
/*
exec sp_CreateDataLoadScript ‘MyTable’
*/
create table #a (id int identity (1,1), ColType int, ColName varchar(128))

insert #a (ColType, ColName)
select case when DATA_TYPE like ‘%char%’ then 1 else 0 end ,
COLUMN_NAME
from information_schema.columns
where TABLE_NAME = @TblName
order by ORDINAL_POSITION

if not exists (select * from #a)
begin
raiserror(‘No columns found for table %s’, 16,-1, @TblName)
return
end

declare @id int ,
@maxid int ,
@cmd1 varchar(7000) ,
@cmd2 varchar(7000)

select @id = 0 ,
@maxid = max(id)
from #a

select @cmd1 = ‘select ” insert ‘ + @TblName + ‘ ( ‘
select @cmd2 = ‘ + ” select ” + ‘
while @id < @maxid
begin
select @id = min(id) from #a where id > @id

select @cmd1 = @cmd1 + ColName + ‘,’
from #a
where id = @id

select @cmd2 = @cmd2
+ ‘ case when ‘ + ColName + ‘ is null ‘
+ ‘ then ”null” ‘
+ ‘ else ‘
+   case when ColType = 1 then  ””””’ + ‘ + ColName + ‘ + ””””’ else ‘convert(varchar(20),’ + ColName + ‘)’ end
+ ‘ end + ”,” + ‘
from #a
where id = @id
end
select @cmd1 = left(@cmd1,len(@cmd1)-1) + ‘ ) ” ‘
select @cmd2 = left(@cmd2,len(@cmd2)-8) + ‘ from ‘ + @tblName

select ‘/*’ + @cmd1 + @cmd2 + ‘*/’

exec (@cmd1 + @cmd2)
drop table #a

Go

5 – Exemplo – Criando – Função – Formatação de Valores:

CREATE FUNCTION FormataVT (@Valor float)
Returns varchar(30) as
Begin
Return Replace(Replace(Replace(Convert(Varchar, Convert(Money, @Valor), 1), ‘.’, ‘x’),
‘,’, ‘.’),
‘x’, ‘,’);
End;
Go
Declare @Valores Table (Valor_Total float);
INSERT into @Valores values (1032.5), (1542.24);

SELECT dbo.FormataVT(Valor_Total)  from @Valores;

6 – Exemplo – Gerando – XML com Version e Enconding:

DECLARE @xmlsample varchar(max),
@ArquivoXML Varchar(Max)

SET @xmlsample=’<?xml version=“1.0” encoding=“UTF-8”?>’

Set @ArquivoXML= (Select CODIGO, Descricao from Produtos for XML Auto)

Select @xmlsample + Char(10) + @ArquivoXML

7 – Exemplo – Utilizando – UnPivot:

– Exemplo 1 –
CREATE TABLE dbo.CustomerPhones
(
CustomerID INT PRIMARY KEY, — FK
Phone1 VARCHAR(32),
Phone2 VARCHAR(32),
Phone3 VARCHAR(32)
);

INSERT dbo.CustomerPhones (CustomerID, Phone1, Phone2, Phone3)
VALUES (1,’705-491-1111′, ’705-491-1110′, NULL),
(2,’613-492-2222′, NULL, NULL),
(3,’416-493-3333′, ’416-493-3330′, ’416-493-3339′);

– Forçando UnPivot sem utilizar o Operador UnPivot –
SELECT CustomerID, Phone = Phone1
FROM dbo.CustomerPhones WHERE Phone1 IS NOT NULL
UNION ALL
SELECT CustomerID, Phone = Phone2
FROM dbo.CustomerPhones WHERE Phone2 IS NOT NULL
UNION ALL
SELECT CustomerID, Phone = Phone3
FROM dbo.CustomerPhones WHERE Phone3 IS NOT NULL;

– Utilizando o Operador UnPivot –
SELECT CustomerID, Phone
FROM
(
SELECT CustomerID, Phone1, Phone2, Phone3
FROM dbo.CustomerPhones
) AS cp
UNPIVOT
(
Phone FOR Phones IN (Phone1, Phone2, Phone3)
) AS up;
– Exemplo 2 –
CREATE TABLE dbo.CustomerPhones2
(
CustomerID INT PRIMARY KEY, — FK
Phone1 VARCHAR(32),
PhoneType1 CHAR(4),
Phone2 VARCHAR(32),
PhoneType2 CHAR(4),
Phone3 VARCHAR(32),
PhoneType3 CHAR(4)
);

INSERT dbo.CustomerPhones2 VALUES
(1,’705-491-1111′, ‘cell’, ’705-491-1110′, ‘home’, NULL,NULL),
(2,’613-492-2222′, ‘home’, NULL, NULL, NULL, NULL),
(3,’416-493-3333′, ‘work’, ’416-493-3330′, ‘cell’,
’416-493-3339′, ‘home’);

– Utilizando o Operador UnPivot –
SELECT CustomerID, Phone, PhoneType
FROM
(
SELECT CustomerID, Phone, PhoneType,
idp = SUBSTRING(Phones, LEN(Phones) – PATINDEX(‘%[^0-9]%’, REVERSE(Phones)) + 2, 32),
idpt = SUBSTRING(PhoneTypes, LEN(PhoneTypes) – PATINDEX(‘%[^0-9]%’, REVERSE(PhoneTypes)) + 2, 32)
FROM
(
SELECT CustomerID, Phone1, Phone2, Phone3,
PhoneType1, PhoneType2, PhoneType3
FROM dbo.CustomerPhones2
) AS cp
UNPIVOT
(
Phone FOR Phones IN (Phone1, Phone2, Phone3)
) AS p
UNPIVOT
(
PhoneType FOR PhoneTypes IN (PhoneType1, PhoneType2, PhoneType3)
) AS pt
) AS x
WHERE idp = idpt;

Pois bem pessoal, estes são os Short Scripts disponibilizados nesta relação, fique a vontade para compartilhar com seus contatos, amigos, DBAs, Profissionais de Banco de Dados, Amantes do SQL Server, Estudantes, enfim para todos.

Agradeço a sua visita, espero que este conteúdo possa te ajudar.

Um grande abraço e Viva a Argentina Futura Tri-Campeã Mundial de Futebol.

 

RUMOR: KERNEL NT DO WINDOWS THRESHOLD CHEGA À VERSÃO 6.4


A Microsoft está trabalhando atualmente na nova geração do Windows conhecida como Windows Threshold (e que pode ou não se chamar Windows 9). De acordo com uma imagem divulgada neste fim de semana no Twitter pelo usuário Stealth2013, o kernel NT do Windows Threshold chegou à versão 6.4. No Windows 8.1, a versão do kernel NT é 6.3.

A imagem mostra logs da Windows Store com diversos novos builds do Windows, incluindo o 6.4.9788.

Embora o kernel NT do Windows Threshold tenha chegado à versão 6.4, nenhuma outra informação foi divulgada sobre este build específico.

Com o lançamento do Windows Vista, o kernel foi atualizado da versão 5.1 (presente no Windows XP) para a versão 6.0. O Windows 7 usou a versão 6.1 e o Windows 8 usou a versão 6.2.

Também não se sabe se a versão final do kernel NT do Windows Threshold será mesmo 6.4 ou se a Microsoft o atualizará para a versão 7.0 (o que é improvável, já que esta mudança pode causar problemas de compatibilidade assim como ocorreu com o Windows Vista).

Pouco se sabe sobre o Windows Threshold, mas novos rumores dizem que ele incluirá diversos novos recursos com foco no uso tradicional do sistema operacional com mouse e teclado. Com isso sua aparência e funcionalidades deverão variar de acordo com o hardware onde ele for instalado.

Usuários rodando o Windows Threshold em um desktop/laptop terão uma versão com foco no uso da área de trabalho tradicional. Usuários de aparelhos dois-em-um, como o Yoga da Lenovo ou o Surface Pro da Microsoft, terão uma versão que permite a alternância entre o ambiente Metro e a área de trabalho tradicional (se um teclado físico for conectado ele alterna para o modo com foco na área de trabalho tradicional, por exemplo).

Já a versão híbrida do Windows Threshold com foco em tablets e smartphones não terá uma área de trabalho tradicional. Apesar disso, esta versão ainda deve suportar a execução de aplicativos lado a lado.

VERSÃO 6.4 DO KERNEL NT DO WINDOWS THRESHOLD APARECEU EM LOGS DA WINDOWS STORE:

Rumor: Kernel NT do Windows Threshold chega à versão 6.4Versão 6.4 do kernel NT do Windows Threshold apareceu em logs da Windows Store

Fontes e Direitos Autorais: Baboo.com – SID VICIOUS @ 6 JUL 2014 | 11:13 AM

MICROSOFT ENCERRA SUPORTE DO WINDOWS 7 DAQUI 6 MESES


Com o fim do suporte do Windows XP há exatamente três meses, muitos usuários que ainda estão pensando em migrar para o Windows 7 certamente não sabem que daqui 6 meses o Windows 7 não terá suporte completo da Microsoft.

Microsoft encerra suporte do Windows 7 daqui 6 meses

MICROSOFT ENCERRA SUPORTE DO WINDOWS 7 DAQUI 6 MESES

O Windows 7 foi lançado em 2009 e o Service Pack 1 em 2011, e o suporte gratuito de ambos termina dia 13 de janeiro de 2015. Até essa data o usuário continuará recebendo atualizações e correções de segurança até 2020, mas algumas atualizações específicas (hotfixes, entre outras) poderão estar disponíveis somente para empresas com contrato de suporte estendido.

Além do Windows 7, no dia 13 de janeiro de 2015 não haverá mais atualizações e correções gratuitas para Windows Server 2008 e 2008 R2, Windows Storage Server 2008, Dynamics 2010 e NAV 2009 e 2009 R2. Nesta data o Windows Server 2003 deixará de receber definitivamente todo tipo de correção e atualização – inclusive paga.

Microsoft encerra suporte do Windows 7 daqui 6 meses

A lista com a lista do ciclo de vida do Windows 7 está aqui  e a página geral sobre Ciclo de Vida de Suporte da Microsoft está aqui

Fontes e Direitos Autorais: Baboo.com – 8 JUL 2014 | 7:50 PM.

DOIS NOVOS GUIAS DO WINDOWS 8.1 UPDATE 1 PARA EMPRESAS


A Microsoft disponibilizou para download dois novos guias do Windows 8.1 Update 1 para empresas. O primeiro é um guia rápido de referência, com instruções passo a passo para desbloquear o computador, mostrar todos os apps instalados, fechar apps e mais:

w81u1-guia-02
Já o segundo dos novos guias do Windows 8.1 Update 1 para empresas oferece uma visão geral de alguns dos novos recursos presentes nesta versão do sistema operacional da Microsoft.

Este segundo guia aborda o gerenciamento de aplicativos, personalização da tela inicial, uso do OneDrive e do OneDrive for Business, Internet Explorer 11 e mais:

Dois novos guias do Windows 8.1 Update 1 para empresas

BAIXE OS NOVOS GUIAS DO WINDOWS 8.1 UPDATE 1 PARA EMPRESAS

Os dois novos guias estão disponíveis para download no formato .docx aqui e aqui. Outro detalhe é que estes guias estão disponíveis apenas em inglês.

Os dois guias também trazem links úteis com mais informações para os usuários em ambientes corporativos.

SOBRE O WINDOWS 8.1 UPDATE 1

O Windows 8.1 Update 1 foi lançado pela Microsoft em outubro de 2013. Esta atualização, que está disponível via Windows Update para os usuários do Windows 8.1, trouxe melhorias com foco no uso do sistema operacional com mouse e teclado, como novos botões e menus de contexto na tela inicial e novos botões para minimizar, maximizar e fechar os apps Metro.

Já para os usuários em computadores/notebooks/ultrabooks sem telas sensíveis ao toque, a atualização permitirá que o sistema operacional inicialize diretamente na área de trabalho por padrão. Você ainda poderá acessar a tela inicial clicando no botão Windows na barra de tarefas ou pressionando a tecla winkey no teclado.

Além disso, com o Windows 8.1 Update 1 é possível fixar os apps Metro na barra de tarefas para acesso rápido.

Outra novidade trazida por esta atualização é o Modo Empresarial no Internet Explorer 11. O Modo Empresarial permitirá que as empresas especifiquem quais sites devem ser carregados neste modo de compatibilidade automaticamente. Isto é útil, principalmente, para casos no qual portais internos só podem ser visualizados corretamente com versões mais antigas do navegador.

Ao configurar este modo, o administrador pode especificar o local onde a lista de sites, usados pelo Modo Empresarial, fica armazenada e também pode optar por permitir ou não que os usuários ativem este modo manualmente.

Fontes e Direitos Autorais: Baboo.com – SID VICIOUS @ 2 JUL 2014 | 8:42 AM

NOVAS INFORMAÇÕES SOBRE O WINDOWS THRESHOLD


A jornalista Mary Jo Foley publicou no dia 30/06 novas informações sobre o Windows Threshold, nova geração do sistema operacional Windows. Rumores afirmam que esta nova geração do sistema operacional da Microsoft deve chegar ao mercado em 2015.

NOVAS INFORMAÇÕES SOBRE O WINDOWS THRESHOLD

De acordo com as novas informações sobre o Windows Threshold publicadas pela jornalista, a Microsoft está trabalhando para tornar o novo sistema operacional, que pode ou não se chamar Windows 9, mais atraente para os usuários do Windows 7.

Para conseguir isso, a empresa incluirá diversos novos recursos com foco no uso tradicional do sistema operacional com mouse e teclado.

Novas informações sobre o Windows Threshold
Com o Windows 8.1 Update 1, a Microsoft alterou o sistema operacional para que ele se comporte de maneiras específicas em certos cenários. Por exemplo, em computadores sem telas sensíveis ao toqueele é inicializado diretamente na área de trabalho por padrão. Já o botão Opções de Ligar/Desligar na tela inicial pode oferecer mais opções de acordo com o hardware.

A jornalista afirma que a Microsoft continuará com este tipo de trabalho no Windows Threshold, o que significa que sua aparência e funcionalidades deverão variar de acordo com o hardware onde ele for instalado.

Usuários rodando o Windows Threshold em um desktop/laptop terão uma versão com foco no uso da área de trabalho tradicional. Usuários de aparelhos dois-em-um, como o Yoga da Lenovo ou o Surface Pro da Microsoft, terão uma versão que permite a alternância entre o ambiente Metro e a área de trabalho tradicional (se um teclado físico for conectado ele alterna para o modo com foco na área de trabalho tradicional, por exemplo).

Já a versão híbrida do Windows Threshold com foco em tablets e smartphones não terá uma área de trabalho tradicional. Apesar disso, esta versão ainda deve suportar a execução de aplicativos lado a lado.

Segundo a jornalista Mary Jo Foley, esta versão híbrida do Windows Threshold funcionará em aparelhos da linha Lumia baseados na arquitetura ARM, em tablets com processadores baseados na arquitetura ARM e futuramente em tablets equipados com processadores Intel Atom.

De acordo com as informações sobre o Windows Threshold divulgadas pela jornalista, a versão com foco no uso da área de trabalho tradicional terá um menu Iniciar e suportará a execução de apps Metro em janelas. Ainda não se sabe se esta versão permitirá ou não a desativação completa da tela inicial.

Menu Iniciar exibido pela Microsoft durante a conferência Build neste ano

Antes da chegada do Windows Threshold ao mercado, a jornalista afirma que a Microsoft deve lançar uma versão preview desta nova geração do Windows ainda em 2014.

Além disso, a Microsoft lançará a segunda grande atualização para o Windows 8.1, o Windows 8.1 Update 2 neste ano. Informações sobre o que esta atualização trará de novo ainda são desconhecidas.

O desenvolvimento do Windows 8.1 Update 2 deve ser concluído nos próximos dias. A atualização deverá ser disponibilizada via Windows Update em agosto.

Fontes e Direitos Autorais: Baboo.com – SID VICIOUS.