quarta-feira, 10 de setembro de 2014

Zerar coluna identity SQL Server (Reset Identity)

Algumas vezes é preciso zerar os dados de uma tabela no SQL Server, e para não perder a sequência de IDs, as vezes também é preciso zerar o identity.

Ao invés de recriar a tabela, o simples comando CHECKIDENT pode fazer isso.

Funciona assim:

DBCC CHECKIDENT('NomeDaTabela', RESEED, 0)

Onde:

  • 'NomeDaTabela' é o nome da tabela que terá o identity reiniciado;
  • RESEED é o comando para reiniciar o identity;
  • 0 é o número para o qual você quer que a contagem recomece, no caso zero. Caso queira voltar para outro número, basta indicá-lo.
Nota: Neste exemplo o próximo número do identity será 1, caso queria que seja 101 por exemplo, atribua o valor 100.

Vamos ao exemplo?

1º) Vamos criar uma tabela de funcionários com identity na coluna Id [Funcionarios]:


CREATE TABLE [dbo].[Funcionarios](
[Id] [int] IDENTITY(1,1) NOT NULL, --Indica que a coluna será incremental de 1
[Nome] [varchar](100) NULL,
[Email] [varchar](200) NULL
 CONSTRAINT [PK_Usuario] PRIMARY KEY CLUSTERED (Id) 
)


2º) Vamos inserir alguns registros na tabela de funcionários:

INSERT INTO Funcionarios VALUES ('Ronaldo Luís Nazário de Lima', 'ronaldo.nazario@exemplo.com.br')
INSERT INTO Funcionarios VALUES ('David Luiz', 'david.luiz@exemplo.com.br')
INSERT INTO Funcionarios VALUES ('Edson Arantes do Nascimento', 'edson.pele@exemplo.com.br')

3º) Vamos checar os ids dos registros inseridos:

4º) Vamos checar o identity atual da tabela, utilizando o mesmo comando RESEED mas sem passar o parâmetro numérico.



5º) Vamos deletar os registros e fazer uma nova inserção, que terá o ID 4:

DELETE FROM [Funcionarios]
INSERT INTO Funcionarios VALUES ('Ronaldo Luís Nazário de Lima', 'ronaldo.nazario@exemplo.com.br')


6º) Como não queremos que a tabela comece do id 4, vamos apagar os registros novamente e zerar o seu Id:
DELETE FROM [Funcionarios]

DBCC CHECKIDENT('[Funcionarios]', RESEED, 0) --Repita o comando, porque na 1ª vez o SQL vai mostrar o identity atual

INSERT INTO Funcionarios VALUES ('Ronaldo Luís Nazário de Lima', 'ronaldo.nazario@exemplo.com.br')

SELECT * FROM [Funcionarios]




E é assim que é possível zerar o identity das tabelas do SQL Server.

Útil principalmente quando há revisão em dados e deseja manter Ids iguais entre diferentes ambientes, como de desenvolvimento e produção por exemplo.

segunda-feira, 7 de outubro de 2013

Google Analytics – Caminho da página e Título da página no mesmo relatório de conteúdo

 Por padrão não é possível extrair num mesmo relatório de conteúdo do Google Analytics a página e o título da página.

Eu precisava muito disso e consegui então resolvi compartilhar!

Vamos lá, com a história triste primeiro e depois o resultado...

No Google Analytics somente é possível extrair relatório por página ou título da página, um por vez, sem a chance de habilitar um dos dois como dimensão secundária.

Ou você tem por Página:



Ou por Título da página:


Não há, na lista de dimensões secundárias, uma opção para página ou título da página:


Mas se você precisa muito juntar estas duas informações num relatório, siga as seguintes instruções usando o navegador Google Chrome (único que testei) e terá sucesso:

1. Classifique o relatório por caminho da página, como se houvesse uma dimensão secundária para o título da página.


2. Como não existe a secunda dimensão que queremos, escolha Conteúdo > Nome do host.



3. Vá até a URL e repare que há dois segmentos nela: O pagePath e o hostname.


4. Agora ficou fácil né? Sim, basta trocar o hostname por pageTitle e mandar um Enter.


5. O resultado é este, caminho da página e o título da página no mesmo relatório de conteúdo.

terça-feira, 16 de abril de 2013

Converter várias linhas em uma string/varchar SQL Server

A dica da vez é sobre como converter várias linhas de um resultado de select por exemplo em uma linha só, separado por exemplo do ponto e virgula ";", no SQL Server.

O script é bem simples e pode ser transformado numa função que retorne string (varchar) para ser usada em outras queries.

No exemplo abaixo criei uma tabela de pessoas, com Id, Nome e Idade. No cenário quero recuperar numa única coluna e linha quais as pessoas com idade > 20, separadas por ponto e virgula.

Vamos lá?

--// Cria tabela de exemplo  num banco de dados do SQL Server
Create table Pessoas (Id Int Identity(1,1), Nome Varchar(100), Idade int)

--// Insere alguns valores na tabela para teste
Insert into Pessoas Values ('Andre', 20)
Insert into Pessoas Values ('Beatriz', 22)
Insert into Pessoas Values ('Carlos', 23)

--// Declara variável que receberá a lista (pode ser maior)
Declare @Result Varchar(200)

--// Inicia variável vazia por que varchar não concatena com null
Set @Result = ''

--// Seleciona cada registro que atende o select e concatena com a variável
Select @Result = @Result + Nome + '; '
  From Pessoas
 Where Idade > 20

--// Se houve resultado, retira o último caractere (;)
If @Result <> ''
Begin
   --// Retira o último caractere ";"
   Set @Result = SUBSTRING(@Result, 1, len(@Result)-1)
End

--// Retorna
Select @Result as Pessoas

No exemplo implementei ainda uma regra para tirar o ponto e virgula do final da variável. O resultado é o seguinte:
Resultado


Coisa simples, mas evita alguns loops, seja com cursor ou tabela temporária, que é a primeira coisa que pensamos diante de uma necessidade como essa.

Simples né? Espero que útil também!

segunda-feira, 15 de abril de 2013

Desabilitar temporariamente foreign key SQL Server

No SQL Server, algumas vezes é preciso alterar dados de tabelas relacionadas e com a existência de foreigns keys se torna uma tarefa impossível, porque quando você tenta fazer update na tabela 1 recebe erro por existirem dados relacionados na tabela 2 e vice e versa.

Para quem precisa, assim como eu eventualmente preciso, fica a dica para desabilitar foreign key temporariamente. (E tem que ser mesmo temporária hein!)

Nota: É possível desabilitar todas as foreign keys de uma vez ou alguma específica, conforme os exemplos:

Todas as foreigns keys
-- 1º) Desabilita TODAS as foreign key de uma tabela SQL Server
ALTER TABLE [NomeDaTabele] NOCHECK CONSTRAINT ALL

-- 2º) Habilita TODAS as foreign key de uma tabela SQL Server novamente
ALTER TABLE [NomeDaTabela] CHECK CONSTRAINT ALL


Uma foreign key específica
-- 1º) Desabilita uma foreign key específica de uma tabela SQL Server
ALTER TABLE [NomeDaTabela] NOCHECK CONSTRAINT [NomeDaConstraint]

-- 2º) Habilita uma foreign key específica de uma tabela SQL Server
ALTER TABLE [NomeDaTabela] CHECK CONSTRAINT [NomeDaConstraint]


Mais uma vez atento para não esquecer de habilitar a foreign key depois.

É isso aí, simples e objetivo! Espero que também seja útil!

sexta-feira, 7 de dezembro de 2012

Geolocation com HTML 5 e API Mapas do Google

O HTML 5 traz bastante simplicidade: Geolocalização (Geolocation), LocalStorage (Armazenamento local), EditableConteúdo editável, PlaceHolders, Expressões regulares e etc.

Neste post vou escrever sobre a Geolocation. A propósito, se não autorizou o acesso à sua localização, volte e autorize para vê-la no mapa.


Esta é a sua geolocalização:
              


A Geolocation do HTML 5 recupera a localização do usuário, especificamente a longitude e a latitude do ponto de acesso à internet. Isso pode variar de rede à rede e das configurações que cada uma pode ter. Mas em situações normais, a localização do acesso será identifica.

Juntando a Geolocation com a API de mapas do Google, temos o resultado acima, que é a exibição da localização no mapa.

Vamos lá, aos códigos! Primeiros exemplos e comentários e depois todo código disponível para download.

Como vamos monta um mapa, é preciso fazer referência à API de Mapa do Google, linha 8. O parâmetro sensor=false indica que não estou usando a API a partir de aplicação com sensor, como um GPS de um Smartphone por exemplo:

É preciso criar as funções javascript para ordenar os acontecimentos, que são 3: Recuperação da localização, Montagem do mapa e tratamento de erros.

Primeiro criamos a que recupera a localização. Ela verifica se o Navegador suporta Geolocalização e em caso positivo segue para a montagem do mapa:
Depois, criamos a função que monta o mapa. Ela recebe os parâmetros de latitude e longitude do resultado da função que recupera a Geolocalização.

O objeto retornado, o position, tem as propriedades latitude e longitude, dentro de coords. Para a API de mapa do Google, precisamos apenas dessas duas informações:
No uso da API, podemos configurar opções, como altura (height), largura (width), tipo de mapa (MapTypeId) e etc. Para conhecer mais sobre esta API, o ideal é acessar a documentação completa on-line em https://developers.google.com/maps/documentation/javascript/.

Acima foi a função de sucesso. Abaixo a função de erro (quando não o navegador não suporta Geolocation):

É preciso também preparar os elementos que receberão as mensagens de sucesso ou erro e uma <div> que receberá o mapa da API do google. Veja o exemplo das mensagens:


Concluídos estes passos, basta chamar a função que recupera a Geolocalização, no caso a recuperaGeolocalizacao(). Pode ser no onclick de um botão ou no onload da página dentro da tag <body> , como no exemplo a seguir. A própria função se encarregará de montar o mapa ou mostrar o erro, a depender do resultado.


E é isso, o resultado é o local exibido no mapa. Se copiar a latitude e longitude e lançar no Google, o resultado é exatamente o mesmo. Teste!

Fica o código completo disponível para download aqui. Espero ter sido útil!

sábado, 1 de dezembro de 2012

Recortar imagens no photoshop com demarcadores

É muito comum precisar recortar imagens no photoshop. É muito comum também para os que não são especialista - como no meu caso - saber qual o melhor método para conseguir a melhor qualidade.

Vou deixar hoje uma dica de usar demarcadores no photoshop, ao invés de ferramentas de seleção.

Temos a imagem abaixo e queremos tirar dela o fundo branco para, por exemplo, fazer um .png com fundo transparente:



Umas das estratégias seria usar a ferramenta varinha mágica e clicar no espaço branco, conforme as imagens abaixo:



Com controle de tolerância, suavização de serrilhado e ajustes manuais com as ferramentas laços, podemos até ter bons resultados, mas tem outro jeito: utilizar a ferramenta caneta para marcar as áreas de corte do fundo da imagem:



Com a ferramenta caneta escolhida, clicamos ponto a ponto e marcamos as áreas de corte do fundo da imagem.


Note que a própria ferramenta tenta ajudar na criação das marcações, a partir do segundo clique, já traçando curvas automaticamente, o que muitas vezes acaba atrapalhando. Neste caso é preciso (no primeiro clique) cortar a ação automática dele, clicando em cima do segundo ponto com a tecla ALT pressionada:


Após terminar a marcação conforme desejado, termos o seguinte:

O marcador fica na aba Demarcadores e para utilizá-lo como seleção e recortar a imagem basta: 1º Selecionar camada da imagem; 2º Clicar no demarcardor segurando a tecla Control; 3º Inverter a seleção Ctrl + Shit + I e deletar.


Os resultados são as possibilidades de sobrepor imagens com recortes mais bem apurados:
 

Daí pra frente é com a imaginação e criatividade.

Espero que tenha sido útil!

sábado, 24 de novembro de 2012

Git - Dicas básicas e práticas

Há alguns meses trocamos na Foco o uso do source control do Team Foundation pelo GIT + o GibHub. De cara parecia bem difícil, mas depois nos acostumamos e agora está bem tranquilo.

Os conceitos são quase sempre os mesmos, mas a praticidade do controle de versões locais + repositório remoto são mais simples e fáceis de fazer.

Para quem estiver começando, deixo as dicas e lembretes sobre o GIT que utilizamos bastante no começo. Quem precisa configurar GIT e GITHUB, recomendo este link http://blog.dmatoso.com/2011/09/git-no-windows-github/ que tem um passo a passo bem bacana.

Segue então a lista, espero que ajude bastante:

Listar as configurações
git config --list

Configurando usuário
$ git config --global user.name "Mario Moraes neto"

Configurando e-mail
$ git config --global user.email mariomoraesneto@gmail.com

Ajuda
git help

Ajuda sobre um comando específico
git help commit (onde commit é o comando sobre o qual se quer ajuda)

Subir um nível de diretório
cd ..

Entrar num diretório
cd nomedodiretorio

Clonar um repositório remoto GitHub (cria um diretório e inicia um repositório)
git clone git://github.com/repositorio/projeto.git

Clonar um repositório remoto GitHub com nome diferente (criar um diretório específico e inicia um repositório)
git clone git://github.com/repositorio/projeto.git NomeDoDiretorio

Status do repositório para ver alterações na branch por exemplo
git status

Ver branches existentes
git branch

Ver branches existentes num diretório remoto
git branch -a

Baixar ultima versão de um branch remoto (origin = diretório remoto)
git pull origin nomedobranch

Ir para uma branch existente
git checkout nomedobranch

Criar uma nova branch e acessá-la
git checkout -b nomedobranch

Adicionar todas as mudanças feitas à branch
git add .

Commit - Marcar como concluídas as mudanças de uma branch
git commit -m "descrição"

Adicionar e commitar as mudanças de uma só vez
git commit -a -m "descrição"

Desfazer alterações de um arquivo
git checkout -- caminho\nomedoarquivo.ext

Baixar uma branch remota e criá-la localmente
git checkout -b nomedabranchlocal origin/nomedabranchremota

Enviar as mudanças para o repositório remoto
git push origin nomedobranch

Enviar as mudanças para o repositório remoto quando o branch local e remoto são diferentes
git push origin nomedobranch_local:nomedobranch_remoto

Remover arquivos excluídos
git add -u

Apagar um branch no repositório remoto:
git push origin :nomedobranch

Apagar uma branch local
git branch -d nomedobranch

Forçar deletar um branch local
git branch -D nome do branch

Merge - Juntar branchs (a partir da master no caso)
git merge nomedobranch

Ignorar/Abortar merge da branch
git merge --abort

Limpar a tela
Clear

Sair
exit

Sair de um comando, como quando usa o git log por exemplo
q

Zerar alterações da branch
git clean -d -x -f

Reinicia a master para origin/master
$ git reset --hard origin/master

Diferença de arquivos entre branchs
$ git diff -- caminhoenomedoarquivo branch1..branch2

Outras Dicas
- Auto completar funciona usando a tecla TAB
Exemplo: git checkout Bran<TAB>

- É possível configurar alias para os comandos, exemplos:
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status

- Referências completas nos links http://git-scm.com/book/en e http://gitready.com/

Espero ter colaborado!