SQLShack (Español)

SQLShack (Español)

Este artículo trata sobre muchos tipos de datos SQL diferentes que utilizamos cuando trabajamos con SQL Server. Comenzaremos con una visión general rápida y repasaremos algunas cosas como categorías de tipos de datos, con qué objetos podemos trabajar y cómo crear nuestros propios tipos de datos personalizados.

descripción general de los tipos de datos SQL

para comenzar, hablemos de qué es un tipo de datos. Si tuviera que definirlo, diría que el tipo de datos determina el tipo, tamaño y rango de datos que se pueden almacenar en un objeto., Por lo tanto, esto nos lleva a una cuestión de objetos que tienen tipos de datos:

  • columnas
  • Variables
  • expresiones
  • parámetros

estos cuatro tipos de datos SQL de objetos son de la mayor importancia. Las columnas son obviamente para tablas. Cada vez que creamos una variable, también necesitamos asignarle un tipo de datos. Además de estos, tenemos expresiones y parámetros para concluir la lista de objetos que van a contener datos y, por lo tanto, necesitamos especificar qué tipo de datos contendrán.,

continuando, veamos las tres categorías de tipos de datos:

  • Tipos de datos incorporados
  • Tipos de datos alias definidos por el Usuario
  • Tipos de datos CLR (common language runtime) definidos por el Usuario

no hay mucho que decir sobre la primera categoría. Estos son tipos de datos a los que todos estamos acostumbrados. A continuación se muestra un gráfico que enumera tipos de datos incorporados bien conocidos y sus rangos:

  • Nota: El tipo de datos SQL de texto, Ntext e imagen se eliminará en una versión futura de SQL Server. Es aconsejable evitar el uso de estos tipos de datos en nuevos trabajos de desarrollo., Utilice los tipos de datos varchar(max), nvarchar(max) y varbinary(max) en su lugar.

a continuación, tenemos lo que mencionamos al principio, y esos son tipos de datos de alias definidos por el usuario que nos permiten crear nuestros propios tipos de datos basados en la lista incorporada de arriba.

la última categoría son los tipos de datos de common language runtime (CLR) definidos por el usuario que nos permiten crear nuestros propios tipos de datos utilizando.NET Framework., Esto es un poco más complicado que el anterior y requiere habilidades de programación para construir un ensamblado, registrar ese ensamblado dentro del servidor SQL, crear un nuevo tipo de datos SQL basado en ese ensamblado y luego podemos comenzar a usar el tipo de datos recién creado en SQL Server.

SQL data Types considerations

pasemos a la siguiente sección que es básicamente solo teoría, pero definitivamente algo en lo que debe pensar al almacenar datos de forma permanente o temporal.,

Conversion

como desarrollador de bases de datos, una de las rutinas más comunes al escribir código es la conversión. La conversión tiene lugar cuando los datos de un objeto se mueven, comparan o combinan con datos de otro objeto. Estas conversiones pueden ocurrir automáticamente, lo que llamamos conversión implícita en SQL Server o manualmente que se conoce como conversión explícita que básicamente significa escribir código específicamente para hacer algo. Una regla práctica es que la conversión explícita siempre es mejor que la conversión implícita porque hace que el código sea más legible., Ahora que estamos hablando de conversiones, también vale la pena mencionar las cosas que nos pueden ayudar con la conversión explícita como CAST y CONVERT funciones utilizadas para convertir una expresión de un tipo de datos SQL a otro.

GUID

GUID es un acrónimo de Globally Unique Identifier. Es una forma de garantizar la singularidad y es uno de los tipos de datos SQL más grandes. El único inconveniente de GUID es el tamaño de 16 bytes. Por lo tanto, evite los índices en GUID tanto como sea posible.

NULL vs, NOT NULL

si mantiene los valores predeterminados de SQL Server, esto podría provocar algunos problemas de integridad de los datos. Siempre debe intentar especificar la propiedad nullability cada vez que defina columnas en tablas. Volviendo a lo básico, null significa desconocido o faltante, lo que básicamente significa que no es 0 o una cadena vacía, y no podemos hacer la comparación de null. No podemos decir null = null. Esto es imposible. Hay una propiedad llamada ANSI_NULLS que podemos establecer y controlar esta comparación con valores null.,

Sparse columns

Este tipo de columna es solo una columna normal en SQL Server, excepto por una propiedad que está establecida en on y le dice a SQL Server que optimice esa columna para el almacenamiento nulo.

directrices de tipo de datos SQL

En primer lugar, Utilice siempre el tipo de datos correcto para el trabajo. Esto es mucho más grande de lo que la mayoría de la gente piensa. Puede tener un impacto significativo en la eficiencia, el rendimiento, el almacenamiento y el desarrollo posterior de la base de datos.

si tomamos los dos primeros, el optimizador de consultas va a generar un plan de ejecución en función de qué tipos de datos se utilizan., Un ejemplo muy simple podría ser si estamos usando el tipo de datos bigint donde podríamos usar el smallint-bueno, entonces, lo más probable es que solo ralenticemos la consulta. Al elegir el tipo de datos SQL correcto, en última instancia, el optimizador de consultas funcionará de manera más eficiente.

es una buena idea proporcionar documentación para usted y otros usando la base de datos sobre los tipos de datos que entran en los objetos. No hace falta decirlo, pero evite los tipos de datos obsoletos, siempre revise la documentación más reciente de Microsoft para las noticias y actualizaciones., Si hay una ligera posibilidad de que vaya a trabajar con datos no en inglés, siempre use tipos de datos Unicode. Además, utilice los tipos de datos sysname para los scripts administrativos sobre el nvarchar.

ejemplos de tipos de datos SQL

pasemos a SSMS y veamos cómo podemos trabajar con algunos de los tipos de datos mencionados en las secciones anteriores. Revisaremos las conversiones, las columnas dispersas y los tipos de datos de alias.

Conversion

Las funciones Cast, Convert y Parse convierten una expresión de un tipo de datos SQL a otro., A continuación se muestra una consulta de ejemplo que se puede usar en una base de datos «AdventureWorks» de muestra contra la tabla «TransactionHistory». Está grabando «ProductID» y»TransactionDate»desde donde podemos usar esa fecha de la transacción para ver cómo funciona la conversión:

Aquí está el conjunto de resultados de varios tipos de datos SQL:

utilizamos la función Cast contra TransactionDate para convertir valores a un nvarchar a una longitud de 30. A continuación, usamos Convert para hacer lo mismo, pero luego también especificamos el formato 110 que nos da un estilo de fecha específico., Por último, utilizamos análisis que esencialmente funciona de la misma manera, pero podemos aplicar la cultura a ella.,mire el conjunto de resultados y vea lo que tenemos:

  1. Aquí tenemos la fecha y la hora de la transacción, ya que se encuentra dentro de la base de datos (tipo de datos datetime)
  2. Aquí es cómo se ve cuando lo lanzamos como una representación de texto
  3. La conversión hace lo mismo, pero en este caso, estamos especificando cómo la función Convert traducirá la expresión (110 = mm-DD-YYYY)
  4. parsing en este caso, solo traduce los datos solicitados utilizando una cultura específica (en-US)

a continuación, veamos algunas cosas adicionales que podemos hacer con la función parse., Parse es genial con la conversión de cadenas a fechas e enteros. Por ejemplo, si ejecutamos la instrucción Select a continuación, se va a agarrar la cadena de 100.000 y convertirlo en un entero:

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

este es el resultado conjunto de:

Ahora, supongamos que queremos hacer la misma cosa de nuevo, pero por alguna razón, el número entero tiene un carácter en que SQL Server no se puede convertir a un entero:

1
SELECCIONE PARSE(’10O.,000 ‘AS INT) AS StringToIntError;

Aquí está el mensaje de error que arroja:

Msg 9819, nivel 16, estado 1, Línea 2
Error convirtiendo el valor de cadena’ 10O.000 ‘ en tipo de datos int usando culture «.,

entonces, lo que podemos hacer en este caso es usar Try_Parse en lugar de Parse regular porque si intentamos lo mismo desde arriba, devolverá un valor nulo en lugar del error:

1

10o.,000′ INT) COMO StringToIntNull;

Aquí es lo que parece:

Este método puede ser utilizado como un identificador si algo de error de antemano AKA defensiva de codificación. Los intentos también se pueden aplicar a los otros dos tipos de datos SQL.

columnas dispersas

Como mencioné al principio, las columnas dispersas reducen los requisitos de espacio 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;

observe que hay muchos valores nulos dentro de las columnas ProductAssemblyID y EndDate:

por lo tanto, podemos digamos que estos dos son buenos candidatos para columnas dispersas., Así, una forma de cambiar esto es simplemente cambiar la propiedad en el diseñador o podemos hacerlo usando el T-SQL de código de abajo:

1
2
3
4

ALTER TABLE Producción.BillOfMaterials ALTER COLUMN ProductAssemblyID ADD SPARSE;
GO
ALTER TABLE Production.,BillOfMaterials ALTER COLUMN EndDate ADD SPARSE;
GO

Los comandos no se completaron correctamente la primera vez, por lo que tuve que perder el índice agrupado (línea 7) y luego todo fue suave:

Si volvemos al explorador de objetos, actualizamos la tabla billofmaterials, podemos ver que esas dos están ahora marcadas como columnas dispersas:

nice, right. Otra cosa interesante sobre las columnas dispersas se llama conjuntos de columnas., Esto es útil en una situación en la que tenemos una tabla que contiene un montón de columnas de propósito especial que rara vez se utilizan como en nuestro ejemplo columnas ProductAssemblyID y EndDate o AddressLine2, MiddleName, etc. Por lo tanto, la idea con el conjunto de columnas es que SQL Server tomará todas esas columnas y nos dará una columna XML generada que es actualizable. Esto puede llevar a un aumento del rendimiento de la aplicación porque SQL Server puede trabajar con el conjunto de columnas en lugar de con cada columna dispersa 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
ADD SparseColumns XML COLUMN_SET FOR ALL_SPARSE_COLUMNS;
GO

por lo tanto, si intentamos agregar un conjunto de columnas pero nuestra tabla ya tiene columnas dispersas, se producirá un error:

msg 1734, nivel 16, estado 1, Línea 9
NO PUEDE CREAR EL CONJUNTO DE columnas dispersas ‘SPARSECOLUMNS’ en la tabla ‘billofmaterials’ porque la tabla ya contiene una o más columnas dispersas. No se puede agregar un conjunto de columnas dispersas a una tabla si la tabla contiene una columna dispersa.,

si alguna vez te encuentras con esto, la solución más fácil es deshacer las columnas dispersas. Esto se puede hacer fácilmente en el diseñador. Simplemente ábralo desde el Explorador de Objetos, seleccione la columna que necesita y dentro de las propiedades de la columna cambie la propiedad is Parse a No como se muestra a continuación:

ahora, si ejecutamos el comando una vez más, tendrá éxito:

la línea de fondo aquí, No No Agregar columnas dispersas primero: agregue conjuntos de columnas primero y luego columnas dispersas. Así no tendrás que hacerlo de la manera difícil., Lo que es realmente bueno de esto, nuestras sentencias DML como Select, Insert y Update todavía pueden funcionar de la manera antigua haciendo referencia a las columnas individualmente o podemos hacerlo usando los conjuntos de columnas.

tipos de datos SQL definidos por el Usuario

terminemos con la creación de un tipo de datos personalizado. Vamos a crear un tipo de datos alias que se basa en otro tipo de datos. Digamos que tenemos la necesidad de almacenar URL en nuestra tabla y queremos crear un tipo de datos de 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., He establecido el valor máximo en 2048 debido a este hilo que he encontrado en línea que indica que debe mantener sus URL bajo 2048 caracteres:

podemos ver este nuevo tipo de datos SQL si nos dirigimos a Object Explorer, en la carpeta Programability, Types, User-Defined Data Types:

desde aquí, podemos comenzar a usar el tipo de datos recién creado., 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., Comenzamos con una visión general solo para familiarizarnos con algunos de los tipos de datos incorporados. Luego hablamos sobre algunas cosas a considerar cuando se trabaja con tipos de datos y conversión utilizando funciones Cast, Convert y Parse. También saltamos a SSMS donde mostramos cómo convertir una expresión de un tipo de datos a otro. Pasamos por cómo trabajar con columnas dispersas, y luego también vimos cómo crear nuestros propios tipos de datos personalizados.

espero que este artículo sobre tipos de datos SQL haya sido informativo para usted y le agradezco por leerlo.,

  • Autor
  • publicaciones recientes

Bojan aka «boksi», un graduado de AP en tecnología de ti enfocado en redes y Tecnología Electrónica de la escuela de diseño y tecnología de Copenhague, es un analista de software con experiencia en garantía de calidad, Soporte de software, evangelización de productos y participación de usuarios.,
ha escrito extensamente sobre SQL Shack y ApexSQL Solution Center, sobre temas que van desde tecnologías de cliente como resolución 4K y tematización, manejo de errores a estrategias de índice y monitoreo de rendimiento.Bojan trabaja en ApexSQL en Nis, Serbia como parte integral del equipo que se enfoca en diseñar, desarrollar y probar la próxima generación de herramientas de base de datos, incluyendo MySQL y SQL Server, y tanto herramientas independientes como integraciones en Visual Studio, SSMS y VSCode.,
Ver más sobre Bojan en LinkedIn
ver todas las publicaciones de Bojan Petrovic

últimas publicaciones de Bojan Petrovic (ver todas)
  • Visual Studio Code for MySQL and MariaDB development – August 13, 2020
  • SQL UPDATE syntax explained – July 10, 2020
  • Create view SQL: trabajando con vistas indexadas en SQL Server – March 24, 2020

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *