SQLShack (Português)

SQLShack (Português)

Este artigo é sobre muitos diferentes tipos de dados SQL que usamos ao trabalhar com o SQL Server. Vamos começar com uma visão geral rápida e passar por algumas coisas como categorias de tipos de dados, com que objetos podemos trabalhar, e como criar os nossos próprios tipos de dados personalizados.

SQL Data types overview

To kick things off, let’s talk about what is a data type. Se tivesse de o definir, diria que o tipo de dados determina o tipo, o tamanho e a gama de dados que podem ser armazenados num objecto., Então, isso nos leva a uma pergunta de objetos que têm tipos de dados:

  • Colunas
  • Variáveis
  • Expressões
  • Parâmetros

Estes quatro tipos de dados SQL de objetos são da maior importância. As colunas são obviamente para as mesas. Cada vez que criamos uma variável, também precisamos atribuir um tipo de dados a ela. Além disso, temos expressões e parâmetros para concluir a lista de objetos que vão armazenar dados e, portanto, precisamos especificar que tipo de dados eles vão conter.,

Mover, vamos ver as três categorias de tipos de dados:

  • tipos de dados internos
  • definido pelo Usuário tipos de dados de alias
  • definido pelo Utilizador common language runtime (CLR) tipos de dados

não Há muito a dizer sobre a primeira categoria. São tipos de dados a que estamos habituados. Abaixo está um gráfico que lista bem conhecidos tipos de dados incorporados e seus intervalos:

  • Nota: texto, Text, e tipo de dados SQL imagem serão removidos em uma versão futura do servidor SQL. É aconselhável evitar utilizar estes tipos de dados em novos trabalhos de desenvolvimento., Use os tipos de dados varchar(max), nvarchar(max) e varbinary(max).

em seguida, temos o que mencionamos no início, e esses são tipos de dados de alias definidos pelo usuário que nos permitem criar os nossos próprios tipos de dados com base na lista incorporada acima.

a última categoria são os tipos de dados comuns de tempo de execução (CLR) definidos pelo utilizador que nos permitem criar os nossos próprios tipos de dados usando o Framework.net., Isto é um pouco mais complicado do que o acima e requer habilidades de programação para construir uma montagem, registrar essa montagem dentro do servidor SQL, criar um novo tipo de dados SQL com base nessa montagem e então podemos começar a usar o novo tipo de dados criado no servidor SQL.

tipos de dados SQL considerações

Vamos passar para a próxima seção, que é, basicamente, uma teoria, mas definitivamente algo que você deve pensar quando armazenar dados permanentemente ou temporariamente.,

conversão

como um desenvolvedor de banco de dados, uma das rotinas mais comuns ao escrever código é converter. A conversão ocorre quando dados de um objeto são movidos, comparados ou combinados com dados de outro objeto. Essas conversões podem acontecer automaticamente, o que chamamos de conversão Implícita no SQL Server ou manualmente, que é conhecido como conversão Explícita que, basicamente, significa escrever código especificamente para fazer algo. Uma regra de ouro útil é que a conversão explícita é sempre melhor do que a conversão implícita porque torna o código mais legível., Agora que estamos falando de conversões, também vale a pena mencionar é o material que pode nos ajudar com a conversão explícita como CAST e converter funções usadas para converter uma expressão de um tipo de dados SQL para outro.

GUID

GUID é um acrônimo para Global Unique Identifier. É uma forma de garantir a singularidade e é um dos maiores tipos de dados SQL. O único lado negativo do GUID é os 16 bytes em tamanho. Por conseguinte, evite, tanto quanto possível, índices de GUIDs.

null vs., Não NULL

Se você ficar com os valores por omissão do servidor SQL, isso pode levar a alguns problemas de integridade de dados. Deverá sempre tentar indicar a propriedade de nulabilidade sempre que estiver a definir colunas nas tabelas. Voltando ao básico, null significa desconhecido ou ausente, o que basicamente significa que não é 0 ou uma string vazia, e não podemos fazer a comparação nula. Não podemos dizer nulo = nulo. Isto é impossível. Há uma propriedade chamada ANSI_NULLS que podemos definir e controlar esta comparação com valores nulos.,

colunas esparsas

este tipo de coluna é apenas uma coluna regular no servidor SQL, exceto para uma propriedade que está configurada e diz ao servidor SQL para otimizar essa coluna para armazenamento nulo.

orientações do tipo de dados SQL

em primeiro lugar, utilize sempre o tipo de dados correcto para a tarefa. Isto é muito maior do que a maioria das pessoas pensa. Pode ter um impacto significativo na eficiência, desempenho, armazenamento e desenvolvimento de bases de dados.

Se tomarmos os dois primeiros, O otimizador da consulta irá gerar um plano de execução, dependendo dos tipos de dados utilizados., Um exemplo muito simples poderia ser se nós estamos usando o tipo de dados bigint onde nós poderíamos estar usando o smallint-bem, então, nós provavelmente estamos apenas retardando a consulta. Escolher o tipo de dados SQL direito acabará por resultar em otimizador de consulta trabalhando de forma mais eficiente.

é uma boa ideia fornecer documentação para si e para outros usando a base de dados sobre tipos de dados que vão para os objetos. Escusado será dizer, mas evite tipos de dados obsoletos, verifique sempre a documentação mais recente da Microsoft para as notícias e atualizações., Se houver uma pequena chance de que você vai trabalhar com dados não-ingleses, use sempre os tipos de dados Unicode. Além disso, use os tipos de dados do sysname para os scripts administrativos sobre o nvarchar.

SQL data type examples

Let’s jump over to SSMS and see how we can work with some of the data types mentioned in the previous sections. Passaremos por conversões, colunas esparsas, e tipos de dados alias.

conversão

Cast, converter e processar funções converter uma expressão de um tipo de dados SQL para outro., Abaixo está uma consulta de exemplo que pode ser usada em uma amostra de banco de dados” AdventureWorks “contra a tabela” TransactionHistory”. É agarrando “ProductID”, e “TransactionDate” a partir do qual podemos data da transação para ver como conversão funciona:

Aqui é o conjunto de resultado de vários tipos de dados SQL:

usamos a função Cast contra TransactionDate para converter valores de um tipo de dados nvarchar para um comprimento de 30. Em seguida, nós usamos o Convert para fazer a mesma coisa, mas então nós também especificamos o formato 110 que nos dá um estilo de data específico., Por último, utilizámos o Parse, que funciona essencialmente da mesma forma, mas podemos aplicar-lhe a cultura.,olhar para o conjunto de resultados e ver o que nós temos:

  1. Aqui temos a data e a hora da transação, senta-se no banco de dados (tipo de dados datetime)
  2. Aqui é o que parece quando nós lançá-lo como uma representação de texto
  3. Converter faz a mesma coisa, mas neste caso, estamos especificando a função Convert irá traduzir a expressão (110 = dd-mm-aaaa)
  4. Análise, neste caso, apenas traduz os dados solicitados utilizando cultura específica (pt-br)

em seguida, vamos ver algumas coisas que podemos fazer com a função de análise., Parse é ótimo com a conversão de strings para datas e inteiros. Por exemplo, se executar a instrução Select abaixo, ele vai pegar a cadeia de 100.000 e transformá-lo em um número inteiro:

1
SELECIONE PARSE(‘100.,000’ COMO INT) COMO StringToInt;

Aqui é o conjunto de resultado:

Agora, vamos dizer que nós queremos fazer a mesma coisa novamente, mas por algum motivo, o inteiro tem um personagem em que o SQL Server não é possível converter para um número inteiro:

1
SELECIONE PARSE(’10O.,000′ COMO INT) COMO StringToIntError;

Aqui está a mensagem de erro que ele lança:

Erro 9819, Nível de 16, Estado 1, Linha 2
Erro de conversão de cadeia de valor ‘10.000’ para o tipo de dados int através da cultura “.,

Então, o que podemos fazer nesse caso é usar Try_Parse em vez de regular Analisar porque se nós tentar a mesma coisa de cima, ele vai retornar um valor null em vez de erro:

1
SELECIONE TRY_PARSE(’10O.,000′ COMO INT) COMO StringToIntNull;

Aqui é o que parece:

Este método pode ser utilizado como um identificador se algo iria erro antes do tempo AKA defensiva de codificação. Tentativas podem ser aplicadas para os outros dois tipos de dados SQL também.

colunas esparsas

como mencionei no início, colunas esparsas reduzem os requisitos de espaço nulo., So, let’s jump to Object Explorer in our sample database, locate and query BillOfMaterials table to see how this works:

1
2

SELECT *
FROM Production.,BillOfMaterials bom;

Repare que há um grande número de valores nulos no ProductAssemblyID e EndDate colunas:

Portanto, podemos dizer que esses dois são bons candidatos para colunas esparsas., Assim, uma forma de mudar isso é simplesmente alterar a propriedade do designer ou podemos fazê-lo usando o código T-SQL abaixo:

1
2
3
4

ALTER TABLE Produção.As matérias-primas alteram os produtos da coluna, alterando a produção da tabela.,BillOfMaterials ALTER COLUMN EndDate ADICIONAR ESPARSOS;
IR

Comandos não foi concluída com êxito pela primeira vez, então eu tinha a perder o índice de cluster (linha 7) e, em seguida, correu tudo direitinho:

Se a gente voltar para o Explorador de objectos, atualizar a BillOfMaterials tabela, podemos ver que os dois estão agora marcados como colunas esparsas:

Bom, certo. Mais uma coisa sobre colunas esparsas é chamada conjuntos de colunas., Isto é útil em uma situação em que temos uma tabela que contém um monte de colunas de propósito especial que são raramente usadas como em nosso exemplo colunas ProductAssemblyID e EndDate ou AddressLine2, MiddleName, etc. Então, a idéia com o conjunto de colunas é que o servidor SQL pegará todas essas colunas e nos dará uma coluna XML gerada que é atualizável. Isto pode levar a um aumento de desempenho da aplicação porque o servidor SQL pode trabalhar com o conjunto de colunas ao invés de cada coluna esparsa individualmente.,

So, let’s add a column set using those two examples from above using the following command:

1
2
3

ALTER TABLE Production.,BillOfMaterials
ADICIONAR SparseColumns XML COLUMN_SET PARA ALL_SPARSE_COLUMNS;
IR

Então, se você tentar adicionar uma coluna set, mas a nossa tabela já tem colunas esparsas, ele será erro:

Erro De 1734, Nível de 16, Estado 1, Linha 9
não é Possível criar a coluna esparsa conjunto “SparseColumns’ na tabela ‘BillOfMaterials’ porque a tabela já contém uma ou mais colunas esparsas. Um conjunto de colunas esparsas não pode ser adicionado a uma tabela se a tabela contém uma coluna esparsa.,

Se alguma vez se deparar com isto, a solução mais fácil é desfazer colunas esparsas. Isso pode ser facilmente feito no designer. Apenas abra-o a partir do Objeto de Explorer, selecione a coluna que você precisar, e dentro de uma coluna de propriedades altere o É Analisar a propriedade para Não conforme mostrado abaixo:

Agora, se executarmos o comando mais uma vez, ele vai ser bem sucedido:

A linha inferior aqui, não adicionar colunas esparsas primeiro – adicionar coluna define primeiro e, em seguida, colunas esparsas. Assim não terás de o fazer da maneira mais difícil., O que é realmente legal sobre isso, nossas declarações DML como Selecionar, Inserir e atualizar ainda pode funcionar da maneira antiga, referenciando as colunas individualmente ou podemos fazê-lo usando os conjuntos de colunas.

tipos de dados SQL definidos pelo Utilizador

vamos encerrar as coisas com a criação de um tipo de dados personalizado. Vamos criar um tipo de dados alias que é baseado em outro tipo de dados. Vamos apenas dizer que temos uma necessidade de armazenar URLs em nossa tabela e queremos criar um tipo de dados URL real., All we need to do is execute the code from below:

1
2
3

CREATE TYPE url
FROM varchar(2048) NOT NULL
GO

URLs are just characters, so the varchar data type is perfect for this., Eu tenho definir o valor máximo de 2048 por causa desse segmento que eu encontrei on-line que informa que você deve manter suas URLs sob 2048 caracteres:

podemos ver esse novo tipo de dados SQL se nós cabeça Object Explorer, em Programação, Tipos de Dados Definidos pelo Usuário Tipos de pasta:

a Partir daqui, podemos começar a usar a recém-criada tipo de dados., Just an example:

1
2
3

ALTER TABLE Purchasing.Vendor
ADD PurchasingWebServiceURL2 url NULL
GO

Conclusion

In this article, we learned how to implement SQL data types., Nós começamos com uma visão geral apenas para se familiarizar com alguns dos tipos de dados incorporados. Em seguida, falamos sobre algumas coisas a considerar ao trabalhar com tipos de dados e conversão usando funções Cast, Convert e Parse. Nós também saltamos para o SSMS onde nós mostramos como converter uma expressão de um tipo de dados para outro. Nós passamos por como trabalhar com colunas esparsas, e então nós também vimos como criar nossos próprios tipos de dados personalizados.

espero que este artigo sobre os tipos de dados SQL tenha sido informativo para você e agradeço por lê-lo.,

  • Autor
  • Posts Recentes
Bojan aka “Boksi”, um AP de pós-graduação em Tecnologia de TI focada em Redes de eletrônicos e tecnologia de Copenhaga Escola de Design e Tecnologia, é um analista de software com experiência em garantia de qualidade, suporte de software, produto de evangelismo, e o envolvimento do usuário., ele tem escrito extensivamente sobre o SQL Shack e o ApexSQL Solution Center, em tópicos que vão desde tecnologias de clientes como resolução 4K e temas, manipulação de erros até estratégias de indexação e monitoramento de desempenho.Bojan trabalha na ApexSQL em Nis, Sérvia como parte integrante da equipe focando em projetar, desenvolver e testar a próxima geração de ferramentas de banco de dados, incluindo MySQL e SQL Server, e tanto ferramentas e integrações autônomas em Visual Studio, SSMS e VSCode.,
Veja mais sobre Bojan no LinkedIn
Ver todos os posts por Bojan Petrovic

posts mais Recentes por Bojan Petrovic (ver todas)
  • o Código do Visual Studio para o MySQL e MariaDB desenvolvimento – agosto 13, 2020
  • UPDATE do SQL sintaxe explicou – 10 de julho de 2020
  • CREATE VIEW SQL: Trabalhar com modos de exibição indexados no SQL Server – 24 de Março de 2020

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *