21 de julho de 2020
No post de hoje irei mostrar como ordenar uma lista em C# utilizando LINQ, portanto deve-se importar o namespace.
using System.Linq;
Lembrando que uma lista no caso do nosso exemplo será uma coleção de classes.
Temos a classe:
Aula
{
Id int
NomeAula string
Curso int
TempoDuracao datetime
}
List<Aula> aulas;
Nesse exemplo quero ordenar a lista de aulas com as aulas de menor tempo de duração para a maior:
var aulasOrdenadas = aulas.OrderBy(a => a.TempoDuracao);
Ou caso eu queira fazer o contrário, quero que ordene de forma descendente para ter primeiro as aulas com maior tempo de duração:
var aulasOrdenadas = aulas.OrderByDescending(a => a.TempoDuracao);
Também funciona para ordem alfabética, imaginando que quero ordenar por ordem do nome teria apenas que alterar a propriedade da ordenação:
var aulasOrdenadas = aulas.OrderBy(a => a.NomeAula);
14 de julho de 2020
CSS: Propriedade Display
14 de julho de 2020 henrique
No post de hoje vou mostrar a propriedade Display do CSS.
Como visto na imagem acima temos dois valores principais para o Display, o Block e o Inline, além do nome que não exibe nada e o inline-block que é a mistura dos comportamentos do inline e do block juntos, mas calma vou explicar um a um. Existem ainda outros valores, mas por hoje vamos focar nesses quatro principais e mais usados.
display: none
Esse valor faz com que o elemento não seja exibido na página, o elemento HTML não é renderizado.
display: block
Esse valor faz com que o elemento seja tratado como exclusivo em uma linha, ou seja, apenas esse elemento ocupará a linha toda, por mais que a largura do elemento ocupe a metade da página, nada estará ao seu lado (existem jeitinhos de se alterar isso, mas não é o padrão), semelhante ao que temos no HTML com o <p>, a altura tem um comportamento normal.
display: inline
Esse valor faz com que o elemento permita posicionar elementos ao lado dele etc. semelhante ao que se usa em HTML com o <span> por exemplo, mas não é possível alterar a largura e altura
display: inline-block
Esse valor faz com que o elemento se comporte como um inline onde posso acomodar elementos ao lado na mesma linha e tudo mais que o inline tem, mas com um adicional de poder setar altura e largura como o block permite.
30 de junho de 2020
Quais os bancos de dados mais utilizados 2020
30 de junho de 2020 henrique
O db-engines.com divulga uma lista sempre bem atualizada dos bancos de dados mais utilizados, é interessante ver como estão se saindo no mercado os bancos de dados que você utiliza, tem conhecimento ou pretende estudar. Ele mostra um comparativo entre datas para ver se há uma evolução ou se o mesmo está sendo menos utilizado mundo a fora.
Como podemos ver na lista os 3 maiores ainda continuam e continuarão por um tempo mandando no mercado (Oracle, MySql e Sql Server), mas é interessante ver por exemplo como o MongoDB vem se mantendo na quinta posição, sendo o de maior posição entre os bancos de dados não relacionais.
Caso tenha interesse temos vários artigos relacionados ao MongoDB, vale a pena dar uma olhada.
Além é claro das postagens sobre SQL Server.
Em contrapartida temos o Acces caindo a cada nova temporada enquanto SQLite, Cassandra e os Azure Sql database e Cosmos vem subindo.
![]() |
| Comparativo entre bancos de dados |
23 de junho de 2020
Sql: Limpeza no HD (LogFile)
23 de junho de 2020 henrique
Uma boa forma de conseguir espaço no HD é fazer uma limpeza nos arquivos de log do SQL Server, isso acontece muito com os desenvolvedores que tem banco de dados de testes e ficam executando muitos comandos o tempo todo.
O arquivo de log nesses casos vai inflando e muitas vezes não é tão útil porque foram apenas testes então reduzir a quantidade de informações dele não representará grandes perdas.
Lembrando que isso pode ser aplicado à qualquer banco, não apenas de testes, mas tenha cuidado o arquivo de log tem informações importantes caso precise por exemplo executar um procedimento de manutenção ou análise de dados.
Primeiro vamos ver qual o tamanho do arquivo de log dos bancos de dados que você tem.
WITH FS
AS
(
SELECT DATABASE_ID, TYPE, SIZE * 8.0 / 1024 SIZE, physical_name
FROM SYS.MASTER_FILES
)
SELECT
NAME AS NOMEDOBANCO,
(SELECT SUM(SIZE) FROM FS WHERE TYPE = 0 AND FS.DATABASE_ID = DB.DATABASE_ID) DATAFILESIZEMB,
(SELECT SUM(SIZE) FROM FS WHERE TYPE = 1 AND FS.DATABASE_ID = DB.DATABASE_ID) LOGFILESIZEMB,
(SELECT PHYSICAL_NAME FROM FS WHERE TYPE = 1 AND FS.DATABASE_ID = DB.DATABASE_ID)
FROM SYS.DATABASES DB
Esse comando vai mostrar o nome do banco, o tamanho do banco, o tamanho do log e o local do arquivo ldf.
Compare o tamanho do banco com o tamanho do log para decidir qual banco vai querer executar o procedimento. Muitas vezes os arquivos de log ficam bem maiores que o próprio banco.
USE MEU_BANCO_DE_DADOS
ALTER DATABASE MEU_BANCO_DE_DADOS
SET RECOVERY SIMPLE;
GO
DECLARE @NOMELOG varchar(500) = (SELECT DISTINCT name FROM sys.master_files WHERE type = 1 AND name LIKE '%MEU_BANCO_DE_DADOS%')
DBCC SHRINKFILE (@NOMELOG, 100);
GO
ALTER DATABASE MEU_BANCO_DE_DADOS
SET RECOVERY FULL;
GO
Esse comando vai limpar o arquivo de log até chegar a próximo dos 100 MB por causa desse comando SHRINKFILE (@NOMELOG, 100); caso queira outro valor é só trocar de 100 para o que desejar.
Onde estiver MEU_BANCO_DE_DADOS substitua pelo banco de dados que você escolheu.
16 de junho de 2020
Sql: Having como funciona.
16 de junho de 2020 henrique
Having é a condição que se aplica ao resultado de um group by. Ela pode ser usada em conjunto com o where e tem uma função semelhante a ele, mas servindo apenas para resultados de um group. É muito útil, mas algumas vezes esquecida pelos programadores.
Vamos a um exemplo:
SELECT X, SUM(Y)
FROM TAB
GROUP BY X
HAVING SUM(Y) >= 10
Neste caso estou selecionando a coluna X e realizando uma soma da coluna Y, essa soma é realizada agrupando os X que são iguais, mas eu só quero visualizar os X que tem a soma de Y maior ou igual a 10.
Mas vamos para um exemplo mais real.
SELECT CPF, COUNT(*)
FROM VENDAS
WHERE YEAR(DATA_VENDA) = 2020
GROUP BY CPF
HAVING COUNT(*) > 100
No caso acima quero saber todos os CPFs de clientes que realizaram compras na minha loja no ano de 2020, para isso eu seleciono o CPF e uso o count para contar quantas vendas foram para cada cliente, por isso agrupo por CPF, mas imagine que quero ver apenas os clientes mais fiéis, que fizeram mais de 100 compras, tendo o count e o group by fica simples, é só adicionar o having maior que 100 que no caso uma tradução possível seria tendo, quero uma contagem das vendas agrupadas por cliente, mas mostrando apenas clientes tendo mais que 100 compras.
Tradução literal do comando:
Selecione o CFP e contagem de linhas
da tabela de vendas
quando a data da venda estiver no ano de 2020
agrupando por CPF
tendo a contagem de linhas valor superior a 100.
9 de junho de 2020
Git: Como clonar (baixar) um repositório remoto para sua máquina
9 de junho de 2020 henrique
Para copiar os arquivos de um repositório remoto para a sua máquina é só usar o comando clone:
g clone git@github.com:repositorioRemoto.git meuRepositorioNovo
onde git@github.com:repositorioRemoto.git é o repositório que você quer baixar e meuRepositorioNovo é o nome do repositório na sua máquina.
Lembrando que o clone só serve para repositórios onde você tem permissão para controlar, caso você use o clone para um repositório que não seja seu, você vai conseguir baixar, mas não vai conseguir subir alterações para ele.
2 de junho de 2020
Git: Como enviar alterações para o repositório remoto (push)
2 de junho de 2020 henrique
git commit -am "DescricaoDaMinhaAlteracao"
Isso faz com que seja apenas comitada (confirmada localmente) a alteração, após isso é necessário enviar para o servidor para isso usamos:
git push meuRepositorio master
O comando acima envia minhas alterações para o repositório de nome "meuRepositorio" no brach "master", caso você esteja querendo enviar para outro branch é só colocar o nome dele no lugar do master.
19 de maio de 2020
SQL: Usando o LIKE em consultas
19 de maio de 2020 henrique
No post de hoje vou mostrar o funcionamento do operador LIKE no SQL de uma forma bem simples e bastante últil.
O LIKE é utilizado para quando desejamos encontrar textos, imagine que você está em um site de buscas e quer encontrar tudo relacionado ao seu cliente Mateus, você provavelmente vai querer saber tudo que contenha o nome do Mateus, para isso no SQL utiizamos o seguinte comando:
SELECT * FROM [TABELA DE CLIENTES] WHERE [NOME DO CLIENTE] LIKE '%Mateus%'
Explicando o comando, você irá listar todos os registros onde o campo [NOME DO CLIENTE] possua dentro de seu texto a palavra Mateus, sendo ela no início, para isso utilizamos o % antes da palavra, no fim, para isso usamos o % no final da palavra ou no meio do texto, pois usamos o % no início e no fim.
Como mencionado acima você pode querer listar apenas os textos onde se começa com a palavra Mateus e para isso usamos:
SELECT * FROM [TABELA DE CLIENTES] WHERE [NOME DO CLIENTE] LIKE 'Mateus%'
Ou quando queremos saber se termina com a palavra Mateus:
SELECT * FROM [TABELA DE CLIENTES] WHERE [NOME DO CLIENTE] LIKE '%Mateus'
E claro, também podemos usar outros operadores junto ao Like como por exemplo
SELECT * FROM [TABELA DE CLIENTES] WHERE [NOME DO CLIENTE] LIKE '%Mateus%' AND NOT LIKE '%DEVELOPER%'
7 de maio de 2020
C#: Comparação de tuplas (Tuple) na versão 7.3
7 de maio de 2020 henrique
No post de hoje vamos ver uma novidade do C# 7.3 que facilitou bastante a vida dos programadores.
Ela trata de tuplas (Tuple), e uma das coisas mais chatas e trabalhosas era a comparação entre tuplas, pois eu teria que ficar comparando cada valor em uma tupla individualmente para definir se eram iguais ou não.
Para esse exemplo vou usar uma tupla com dois inteiros como essa Tuple<int, int>
var tupla = (1, 2);
var tupla2 = (2, 3);
Antes para compará-las e saber se eram iguais eu teria que:
bool tuplasIguais = tupla.Item1 == tupla2.Item1 && tupla.Item2 == tupla2.Item2;
Imagine uma tupla com 7 items sendo inteiros, decimais, strings etc. um trabalhão seria necessário. Mas agora com uma simples comparação o C# faz exatamente o que escrevi acima.
bool tuplasIguais = tupla == tupla2;
Pronto elas são comparadas item a item sem ter que fazer isso um a um.
28 de abril de 2020
C#: Como saber a linha que a exceção foi lançada
28 de abril de 2020 henrique
No post de hoje irei mostrar uma forma simples de se capturar a linha exata onde a exceção foi lançada, apenas a linha e não o stack trace inteiro.
Com apenas duas linhas de código (poderia ser uma), selecionamos o stack trace da exceção e colocamos em uma variável, após pegamos o primeiro frame que contém a linha onde a exceção foi lançada, no caso coloquei ela na variável linha assim posso tanto usar em uma mensagem ou um arquivo de texto, log seja o que você precisar.
catch(Exception ex)
{
var stack = new System.Diagnostics.StackTrace(ex, true);
var linha = stack.GetFrame(0).GetFileLineNumber();
}
Com apenas duas linhas de código (poderia ser uma), selecionamos o stack trace da exceção e colocamos em uma variável, após pegamos o primeiro frame que contém a linha onde a exceção foi lançada, no caso coloquei ela na variável linha assim posso tanto usar em uma mensagem ou um arquivo de texto, log seja o que você precisar.
15 de abril de 2020
C#: Como saber a quantidade de casas decimais
15 de abril de 2020 henrique
Nesse post irei mostrar uma forma simples de se contar quantas casas decimais existem em um número no C#, por exemplo 2,35641 tem 5 casas decimais (números após a vírgula).
Nesse caso irei trabalhar com uma variável decimal com o número citado acima e vou setar uma variável tipo inteiro para conter a quantidade de casas decimais.
decimal contarCasas = 2.35641m;
int casasDecimais = (contarCasas.ToString(CultureInfo.InvariantCulture)).Split('.')[1].Length;
No código acima eu converto o decimal para uma string utilizando o culture info para garantir que as casas decimais serão tratadas após o "." e não vírgula "," como aqui no padrão utilizado pelo Brasil, após isso dou um split para separar em duas strings sendo a segunda string tudo o que estiver após o ponto e com isso o tamanho da string será exatamente a quantidade de casas decimais do meu número.
Nesse caso irei trabalhar com uma variável decimal com o número citado acima e vou setar uma variável tipo inteiro para conter a quantidade de casas decimais.
decimal contarCasas = 2.35641m;
int casasDecimais = (contarCasas.ToString(CultureInfo.InvariantCulture)).Split('.')[1].Length;
No código acima eu converto o decimal para uma string utilizando o culture info para garantir que as casas decimais serão tratadas após o "." e não vírgula "," como aqui no padrão utilizado pelo Brasil, após isso dou um split para separar em duas strings sendo a segunda string tudo o que estiver após o ponto e com isso o tamanho da string será exatamente a quantidade de casas decimais do meu número.
18 de fevereiro de 2020
Interpolação de string C#
18 de fevereiro de 2020 henrique
Neste post vou mostrar uma forma bem interessante de se trabalhar com strings em C#.
Essa opção de interpolação se faz muito útil e prática quando temos uma string composta de vários trechos e principalmente variáveis que a compõe.
Para utilizar essa função a chave é o caracter $, como é clássico vamos fazer um olá mundo mais incrementado com isso.
string mundo = "Mundo";
var date = DateTime.Now;
$"Olá, {mundo}! Hoje é {date.DayOfWeek}"
com isso o retorno da sua string seria "Olá, Mundo! Hoje é segunda-feira"
Segue o link para a documentação oficial da Microsoft.
Essa opção de interpolação se faz muito útil e prática quando temos uma string composta de vários trechos e principalmente variáveis que a compõe.
Para utilizar essa função a chave é o caracter $, como é clássico vamos fazer um olá mundo mais incrementado com isso.
string mundo = "Mundo";
var date = DateTime.Now;
$"Olá, {mundo}! Hoje é {date.DayOfWeek}"
com isso o retorno da sua string seria "Olá, Mundo! Hoje é segunda-feira"
Segue o link para a documentação oficial da Microsoft.
4 de fevereiro de 2020
SQL: Como localizar tabelas no banco de dados
4 de fevereiro de 2020 henrique
Algumas vezes quando estamos trabalhando com um banco de dados muito grande fica mais complicado localizar uma tabela ou mesmo saber se já existe uma tabela com aquele nome ou semelhante.
Com esse comando fica mais fácil pesquisar as tabelas existentes no banco de dados:
SELECT C.name AS Tabela
FROM sys.tables AS C (NOLOCK)
WHERE C.NAME LIKE '%TABELA%'
onde é só substituir o texto "TABELA" pelo nome ou parte do nome da tabela que está pesquisando.
Caso deseje procurar por colunas em tabelas dê uma conferida nesse post aqui.
Com esse comando fica mais fácil pesquisar as tabelas existentes no banco de dados:
SELECT C.name AS Tabela
FROM sys.tables AS C (NOLOCK)
WHERE C.NAME LIKE '%TABELA%'
onde é só substituir o texto "TABELA" pelo nome ou parte do nome da tabela que está pesquisando.
Caso deseje procurar por colunas em tabelas dê uma conferida nesse post aqui.
28 de janeiro de 2020
SQLServer: Reparar banco de dados suspeito (Repair Suspect Data Base)
28 de janeiro de 2020 henrique
Os passos abaixo vão fazer com que:
Muito cuidado ao executar esses processos, pode ser irreversível.
EXEC sp_resetstatus [Database];
ALTER DATABASE [Database] SET EMERGENCY
DBCC checkdb([Database])
ALTER DATABASE [Database] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DBCC CheckDB ([Database], REPAIR_ALLOW_DATA_LOSS)
ALTER DATABASE [Database] SET MULTI_USER
- o banco de dados resete seu status,
- depois ele é colocado como emergência
- é feita uma checagem para se saber o nível e onde estão os problemas
- é setado para apenas um usuário realizar alterações
- é feita uma reparação aceitando que dados podem ser perdidos no processo
- volta-se o banco de dados ao uso normal
Muito cuidado ao executar esses processos, pode ser irreversível.
EXEC sp_resetstatus [Database];
ALTER DATABASE [Database] SET EMERGENCY
DBCC checkdb([Database])
ALTER DATABASE [Database] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DBCC CheckDB ([Database], REPAIR_ALLOW_DATA_LOSS)
ALTER DATABASE [Database] SET MULTI_USER
14 de janeiro de 2020
SQL: Como selecionar tipo de dados das colunas
14 de janeiro de 2020 henrique
No post de hoje irei mostrar como podemos fazer um select das colunas e seu tipo de dados.
O SQL Server tem uma opção onde clicamos com o botão direito do mouse em cima de uma tabela e selecionamos a opção desing, mas com um select fica mais fácil e ágil obter um resultado semelhante veja:
SELECT
COLUMN_NAME,
DATA_TYPE,
NUMERIC_PRECISION,
NUMERIC_SCALE,
IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'MINHATABELA'
Onde o escrito MINHATABELA deve ser substituído pela tabela que você deseja.
O SQL Server tem uma opção onde clicamos com o botão direito do mouse em cima de uma tabela e selecionamos a opção desing, mas com um select fica mais fácil e ágil obter um resultado semelhante veja:
SELECT
COLUMN_NAME,
DATA_TYPE,
NUMERIC_PRECISION,
NUMERIC_SCALE,
IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'MINHATABELA'
Onde o escrito MINHATABELA deve ser substituído pela tabela que você deseja.
7 de janeiro de 2020
O que é scrum
7 de janeiro de 2020 henrique
O Scrum foi criado por Takeuchi e Nonaka, eles publicaram um artigo pela Universidade de Harvard com o nome de "The New New Product Development Game".
Para criar esse artigo os autores fizeram inicialmente pesquisas de campo para estudar o que empresas inovadoras no mercado estavam fazendo diferente das outras, por que elas estavam tendo melhores resultados?
Feita essa pesquisa e colocada em forma de publicação temos o que foi a base do Scrum.
Eles chegaram a conclusão de que um time deve trabalhar unido por um objetivo comum a todos e não com tarefas isoladas e setorizadas, como por exemplo, "um profissional de RH deve contratar os melhores programadores para o projeto", sim isso é óbvio, mas o que esses programadores vão construir e para que são necessários? Quando se tem uma noção real e explícita do objetivo a ser alcançado e quais são os passos para conseguir tudo fica mais fácil.
Definição Scrum (The Scrum Guide):
"Um framework dentro do qual pessoas podem tratar e resolver problemas complexos e adaptativos, enquanto produtiva e criativamente entregam produtos com o mais alto valor possível."
Atualmente o Scrum é largamente utilizado em empresas de Software, mas também em outros tipos de empresas, pois não é focado em apenas um tipo de problema e sim qualquer tipo de problema complexo. Não que ele não possa ser utilizado para problemas mais simples ou corriqueiros, mas terá que ser adaptado para isso, sua essência original não é essa.
O framework funciona como um conjunto de regras de um jogo, ele nos permite jogar de diferentes formas. Assim, podemos empregar as técnicas de diversas maneiras obtendo diferentes resultados.
Portanto antes de tudo leia o scrum guide.
Referência
scrum.org
23 de outubro de 2019
C#: Operadores lógicos menos usados
23 de outubro de 2019 henrique
Operador AND lógico &
O operador & computa o AND lógico de seus operandos. O resultado de x & y será true se ambos x e y forem avaliados como true. Caso contrário, o resultado será false.
O operador & avalia os dois operandos, mesmo se o operando à esquerda for avaliado como false, de modo que o resultado deve ser false, independentemente do valor do operando à direita.
Operador OR exclusivo lógico ^
O operador ^ computa o OR exclusivo lógico, também conhecido como o XOR lógico, de seus operandos. O resultado de x ^ y é true se x é avaliado como true e y avaliado como false, ou x avaliado como false e y avaliado como true. Caso contrário, o resultado será false. Ou seja, para os operandos bool, o operador ^ computa o mesmo resultado que o operador de desigualdade !=.
Operador OR lógico |
O operador | computa o OR lógico de seus operandos. O resultado de x | y será true se x ou y for avaliado como true. Caso contrário, o resultado será false.
O operador | avalia os dois operandos, mesmo se o operando à esquerda for avaliado como true, de modo que o resultado deve ser true, independentemente do valor do operando à direita.
O operador & computa o AND lógico de seus operandos. O resultado de x & y será true se ambos x e y forem avaliados como true. Caso contrário, o resultado será false.
O operador & avalia os dois operandos, mesmo se o operando à esquerda for avaliado como false, de modo que o resultado deve ser false, independentemente do valor do operando à direita.
Operador OR exclusivo lógico ^
O operador ^ computa o OR exclusivo lógico, também conhecido como o XOR lógico, de seus operandos. O resultado de x ^ y é true se x é avaliado como true e y avaliado como false, ou x avaliado como false e y avaliado como true. Caso contrário, o resultado será false. Ou seja, para os operandos bool, o operador ^ computa o mesmo resultado que o operador de desigualdade !=.
Operador OR lógico |
O operador | computa o OR lógico de seus operandos. O resultado de x | y será true se x ou y for avaliado como true. Caso contrário, o resultado será false.
O operador | avalia os dois operandos, mesmo se o operando à esquerda for avaliado como true, de modo que o resultado deve ser true, independentemente do valor do operando à direita.
27 de agosto de 2019
SQL: Localizar funções criadas no banco de dados
27 de agosto de 2019 henrique
Na dica de hoje irei mostrar como listar as funções criadas por usuários em um banco de dados.
Dependendo da sua aplicação pode ser interessante criar funções no banco de dados, só que conforme elas vão se acumulando fica difícil encontrar uma função específica e mesmo que os nomes estejam bem organizados, para ajudar nisso um comando pode listar todas e usar os filtros desejados.
SELECT name AS function_name,
SCHEMA_NAME(schema_id) AS schema_name,
type_desc,
create_date,
modify_date
FROM sys.objects
WHERE type_desc LIKE '%FUNCTION%'
AND NAME LIKE'%Texto Desejado%'
Veja que no where a coluna name tem um like onde se pode colocar parte do nome da função desejada ou apenas remover o and para listar todas as funções, são muitas possibilidades.
Dependendo da sua aplicação pode ser interessante criar funções no banco de dados, só que conforme elas vão se acumulando fica difícil encontrar uma função específica e mesmo que os nomes estejam bem organizados, para ajudar nisso um comando pode listar todas e usar os filtros desejados.
SELECT name AS function_name,
SCHEMA_NAME(schema_id) AS schema_name,
type_desc,
create_date,
modify_date
FROM sys.objects
WHERE type_desc LIKE '%FUNCTION%'
AND NAME LIKE'%Texto Desejado%'
Veja que no where a coluna name tem um like onde se pode colocar parte do nome da função desejada ou apenas remover o and para listar todas as funções, são muitas possibilidades.
24 de julho de 2019
SQL: Como criar unique key com exceções SQL Server
24 de julho de 2019 henrique
Em alguns casos precisamos criar uma chave única no banco de dados com o intuito de não repetir um valor.
Mas pode ser que existam exceções à regra, vou dar um exemplo, tenho uma tabela com o cadastro dos meus clientes e nessa tabela tenho a coluna de CNPJ do tipo varchar, nessa coluna coloco o número do CNPJ do cliente e quando ele é do exterior preencho com o texto "EXTERIOR", mas imagine que se a chave é única só poderia ter um cliente do exterior, para resolver isso crio uma chave única, pois não quero que nenhum CNPJ se repita, mas o caso do EXTERIOR sim pode se repetir, para isso coloco um where na criação do índice.
CREATE UNIQUE INDEX UN_CLIENTE_CNPJ
ON CLIENTE(CNPJ)
WHERE CNPJ != 'EXTERIOR' AND CNPJ IS NOT NULL AND CNPJ != ''
Mas pode ser que existam exceções à regra, vou dar um exemplo, tenho uma tabela com o cadastro dos meus clientes e nessa tabela tenho a coluna de CNPJ do tipo varchar, nessa coluna coloco o número do CNPJ do cliente e quando ele é do exterior preencho com o texto "EXTERIOR", mas imagine que se a chave é única só poderia ter um cliente do exterior, para resolver isso crio uma chave única, pois não quero que nenhum CNPJ se repita, mas o caso do EXTERIOR sim pode se repetir, para isso coloco um where na criação do índice.
CREATE UNIQUE INDEX UN_CLIENTE_CNPJ
ON CLIENTE(CNPJ)
WHERE CNPJ != 'EXTERIOR' AND CNPJ IS NOT NULL AND CNPJ != ''
29 de maio de 2019
SQL: Como localizar coluna no banco de dados
29 de maio de 2019 henrique
Nesse post vou mostrar uma forma de se localizar uma coluna no banco de dados, mesmo quando não se sabe em qual tabela ela está, ou mesmo quando pensamos em criar uma nova coluna e queremos saber se já existe alguma coluna com o mesmo nome.
SELECT T.name AS Tabela, C.name AS Coluna
FROM sys.sysobjects AS T (NOLOCK)
INNER JOIN sys.all_columns AS C (NOLOCK) ON T.id = C.object_id AND T.XTYPE = 'U'
WHERE C.NAME LIKE '%NomeDoCampo%'
Apenas deve-se trocar o NomeDoCampo pelo nome que deseja. Simples assim.
Explicando resumidamente o select, a tabela sysobjects, possui as tabelas e a all_columns possui todas as colunas uma por uma do banco de dados inteiro.
SELECT T.name AS Tabela, C.name AS Coluna
FROM sys.sysobjects AS T (NOLOCK)
INNER JOIN sys.all_columns AS C (NOLOCK) ON T.id = C.object_id AND T.XTYPE = 'U'
WHERE C.NAME LIKE '%NomeDoCampo%'
Apenas deve-se trocar o NomeDoCampo pelo nome que deseja. Simples assim.
Explicando resumidamente o select, a tabela sysobjects, possui as tabelas e a all_columns possui todas as colunas uma por uma do banco de dados inteiro.
Assinar:
Postagens (Atom)


