Cet article traite de nombreux types de données SQL différents que nous utilisons lorsque nous travaillons avec SQL Server. Nous allons commencer par un aperçu rapide et passer en revue certaines choses comme les catégories de types de données, les objets avec lesquels nous pouvons travailler et comment créer nos propres types de données personnalisés.
aperçu des types de données SQL
pour lancer les choses, parlons de ce qu’est un type de données. Si je devais le définir, je dirais que le type de données détermine le type, la taille et la plage de données qui peuvent être stockées dans un objet., Donc, cela nous amène à une question d’objets qui ont des types de données:
- Colonnes
- Variables
- les Expressions
- Paramètres
Ces quatre types de données SQL d’objets sont de la plus haute importance. Les colonnes sont évidemment pour les tables. Chaque fois que nous créons une variable, nous devons également lui attribuer un type de données. En plus de ceux-ci, nous avons des expressions et des paramètres pour conclure la liste des objets qui vont contenir des données et nous devons donc spécifier quel type de données ils contiendront.,
en continuant, voyons les trois catégories de types de données:
- Types de données intégrés
- Types de données alias définis par l’utilisateur
- Types de données CLR (Common language runtime) définis par l’utilisateur
Il n’y a pas grand-chose à dire sur la première catégorie. Ce sont des types de données auxquels nous sommes tous habitués. Vous trouverez ci-dessous un graphique qui répertorie les types de données intégrés bien connus et leurs plages:
- Remarque: les types de données SQL Text, Ntext et Image seront supprimés dans une future version de SQL Server. Il est conseillé d’éviter d’utiliser ces types de données dans les nouveaux travaux de développement., Utilisez plutôt les types de données varchar(max), nvarchar(max) et varbinary(max).
ensuite, nous avons ce que nous avons mentionné au début, et ce sont des types de données d’alias définis par l’utilisateur qui nous permettent de créer nos propres types de données en fonction de la liste intégrée ci-dessus.
la dernière catégorie est les types de données CLR (common language runtime) définis par l’utilisateur qui nous permettent de créer nos propres types de données à l’aide du.Net Framework., C’est un peu plus compliqué que ce qui précède et nécessite des compétences en programmation pour construire un assembly, enregistrer cet assembly dans le serveur SQL, créer un nouveau type de données SQL basé sur cet assembly, puis nous pouvons commencer à utiliser le type de données nouvellement créé dans SQL Server.
considérations sur les types de données SQL
passons à la section suivante qui n’est fondamentalement que théorie, mais certainement quelque chose auquel vous devriez penser lorsque vous stockez des données de manière permanente ou temporaire.,
Conversion
en tant que développeur de base de données, l’une des routines les plus courantes lors de l’écriture de code est la conversion. La Conversion a lieu lorsque les données d’un objet sont déplacées, comparées ou combinées avec des données d’un autre objet. Ces conversions peuvent se produire automatiquement, ce que nous appelons la conversion implicite dans SQL Server ou manuellement, appelée conversion explicite, Ce qui signifie essentiellement écrire du code spécifiquement pour faire quelque chose. Une règle empirique utile est que la conversion explicite est toujours meilleure que la conversion implicite car elle rend le code plus lisible., Maintenant que nous parlons de conversions, il convient également de mentionner les éléments qui peuvent nous aider avec la conversion explicite comme les fonctions CAST et CONVERT utilisées pour convertir une expression d’un type de données SQL en un autre.
GUID
GUID est un acronyme pour l’Identificateur global Unique. C’est une façon de garantir l’unicité et c’est l’un des plus grands types de données SQL. Le seul inconvénient de GUID est la taille de 16 octets. Par conséquent, évitez autant que possible les index sur les GUID.
NULL vs., NOT NULL
Si vous vous en tenez aux valeurs par défaut de SQL Server, cela pourrait entraîner des problèmes d’intégrité des données. Vous devez toujours essayer de spécifier la propriété nullability chaque fois que vous définissez des colonnes dans des tables. Retour à l’essentiel, null signifie inconnu ou manquant, ce qui signifie essentiellement que ce n’est pas 0 ou une chaîne vide, et nous ne pouvons pas faire la comparaison null. Nous ne pouvons pas dire null = null. Ce n’est pas peut faire. Il existe une propriété appelée ANSI_NULLS que nous pouvons définir et contrôler cette comparaison avec des valeurs null.,
colonnes clairsemées
ce type de colonne est juste une colonne régulière dans SQL Server à l’exception d’une propriété qui est définie sur on et qui indique à SQL Server d’optimiser cette colonne pour le stockage null.
type de données SQL lignes directrices
tout d’Abord, toujours utiliser le bon type de données pour le travail. C’est beaucoup plus grand que la plupart des gens pensent. Il peut avoir un impact significatif sur l’efficacité, les performances, le stockage et le développement ultérieur de la base de données.
Si nous prenons les deux premiers, l’optimiseur de requête va générer un plan d’exécution en fonction des types de données utilisés., Un exemple très simple pourrait être si nous utilisons le type de données bigint où nous pourrions utiliser le smallint – Eh bien, nous ralentissons très probablement la requête. En choisissant le bon type de données SQL, l’optimiseur de requêtes fonctionnera plus efficacement.
c’est une bonne idée de fournir de la documentation pour vous et les autres en utilisant la base de données sur les types de données entrant dans les objets. Cela va sans dire, mais évitez les types de données obsolètes, vérifiez toujours la dernière documentation de Microsoft pour les nouvelles et les mises à jour., S’il y a une légère chance que vous travailliez avec des données non anglaises, utilisez toujours les types de données Unicode. En outre, utilisez les types de données sysname pour les scripts d’administration sur nvarchar.
exemples de types de données SQL
passons à SSMS et voyons comment nous pouvons travailler avec certains des types de données mentionnés dans les sections précédentes. Nous passerons en revue les conversions, les colonnes clairsemées et les types de données d’alias.
Conversion
Les fonctions Cast, Convert et Parse convertissent une expression D’un type de données SQL en une autre., Vous trouverez ci-dessous un exemple de requête qui peut être utilisée sur un exemple de base de données « AdventureWorks” par rapport à la table « TransactionHistory”. Il saisit « ProductID” et »TransactionDate »à partir desquels nous pouvons utiliser cette date de la transaction pour voir comment fonctionne la conversion:
Voici l’ensemble de résultats de différents types de données SQL:
Nous avons utilisé la fonction Cast contre TransactionDate pour convertir des valeurs en nvarchar Ensuite, nous avons utilisé Convert pour faire la même chose, mais nous avons également spécifié le format 110 qui nous donne un style de date spécifique., Enfin, nous avons utilisé Parse qui fonctionne essentiellement de la même manière, mais nous pouvons y appliquer la culture.,regardez le jeu de résultats et voyez ce que nous avons obtenu:
- ici, nous avons la date et l’Heure de la transaction telle qu’elle se trouve dans la base de données (type de données datetime)
- voici à quoi cela ressemble lorsque nous la convertissons en tant que représentation textuelle
- La Conversion fait la même chose mais-DD-AAAA)
- l’analyse dans ce cas, traduit simplement les données demandées en utilisant une culture spécifique (en-US)
ensuite, voyons quelques choses supplémentaires que nous pouvons faire avec la fonction d’analyse., Parse est idéal pour convertir des chaînes en dates et en entiers. Par exemple, si on exécute l’instruction Select ci-dessous, il va saisir la chaîne de 100.000 et le transformer en un entier:
1
|
SÉLECTIONNEZ PARSE(‘100.,000’ COMME INT) COMME StringToInt;
|
Voici le résultat:
Maintenant, imaginons que nous voulons faire la même chose mais pour une raison quelconque, l’entier a un caractère que SQL Server ne peut pas convertir un entier:
1
|
SÉLECTIONNEZ PARSE(’10O.,000 ‘comme INT) comme StringToIntError;
|
Voici le message d’erreur qu’il renvoie:
Msg 9819, niveau 16, état 1, Ligne 2
erreur de conversion de la valeur de chaîne’ 10o.000 ‘ en type de données int en utilisant la culture « .,
Donc, ce que nous pouvons faire dans ce cas est d’utiliser Try_Parse au lieu de régulier Analyser parce que si nous essayons la même chose à partir de ci-dessus, il sera de retour une valeur null plutôt que le message d’erreur:
1
|
SÉLECTIONNEZ TRY_PARSE(’10O.,000′ COMME INT) COMME StringToIntNull;
|
Voici à quoi ça ressemble:
Cette méthode peut être utilisée comme identifiant si quelque chose allait erreur d’avance AKA défensive de codage. Des essais peuvent également être appliqués pour les deux autres types de données SQL.
colonnes clairsemées
Comme je l’ai mentionné au début, les colonnes clairsemées réduisent les besoins en espace nul., 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 nomenclature;
|
Notez qu’il y a beaucoup de valeurs nulles dans le ProductAssemblyID et EndDate colonnes:
par conséquent, nous pouvons dire que ces deux sont de bons candidats pour les colonnes fragmentées., Donc, une façon de changer cela est de simplement changer la propriété du concepteur, ou nous pouvons le faire en utilisant le code T-SQL à partir de ci-dessous:
1
2
3
4
|
ALTER TABLE de Production.BillOfMaterials ALTER COLUMN ProductAssemblyID AJOUTER ÉPARSES;
ALLER
ALTER TABLE de Production.,BillOfMaterials ALTER COLUMN EndDate ADD SPARSE;
GO
|
Les commandes ne se sont pas terminées avec succès la première fois, j’ai donc dû perdre l’index clusterisé (ligne 7), puis tout s’est bien déroulé:
si nous revenons à Object Explorer, actualisez la table billofmaterials, nous pouvons voir que ces deux colonnes sont maintenant marquées comme des colonnes clairsemées:
bien, non. Une autre chose intéressante à propos des colonnes clairsemées est appelée jeux de colonnes., Ceci est utile dans une situation où nous avons une table qui contient un tas de colonnes à usage spécial qui sont rarement utilisées comme dans notre exemple ProductAssemblyID et EndDate colonnes ou AddressLine2, MiddleName, etc. Donc, l’idée avec l’ensemble de colonnes est que SQL Server prendra toutes ces colonnes et nous donnera une colonne XML générée pouvant être mise à jour. Cela peut conduire à une amélioration des performances de l’application car SQL Server peut fonctionner avec l’ensemble de colonnes plutôt qu’avec chaque colonne clairsemée individuellement.,
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
|
donc, si nous essayons d’ajouter un jeu de colonnes mais que notre table a déjà des colonnes clairsemées, il y aura erreur:
msg 1734, niveau 16, état 1, Ligne 9
impossible de créer le jeu de colonnes clairsemées ‘SPARSECOLUMNS’ dans la table ‘billofmaterials’ car la table contient déjà une ou plusieurs colonnes clairsemées. Un ensemble de colonnes clairsemées ne peut pas être ajouté à une table si la table contient une colonne clairsemée.,
Si jamais vous rencontrez cela, la solution de contournement la plus simple consiste à annuler des colonnes clairsemées. Cela peut être facilement fait dans le concepteur. Ouvrez – le simplement à partir de L’Explorateur D’objets, sélectionnez la colonne dont vous avez besoin et, dans les propriétés de la colonne, remplacez la propriété is Parse par No comme indiqué ci-dessous:
maintenant, si nous exécutons la commande une fois de plus, elle réussira:
jouter d’abord des colonnes clairsemées-ajoutez d’abord des ensembles de Colonnes, puis des colonnes clairsemées. De cette façon, vous n’aurez pas à faire à la dure., Ce qui est vraiment bien à ce sujet, nos instructions DML telles que Select, Insert et Update peuvent toujours fonctionner à l’ancienne en référençant les colonnes individuellement ou nous pouvons le faire en utilisant les ensembles de colonnes.
types de données SQL définis par l’utilisateur
terminons par la création d’un type de données personnalisé. Nous allons créer un type de données alias basé sur un autre type de données. Disons simplement que nous avons besoin de stocker des URL dans notre table et que nous voulons créer un type de données URL réel., 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., J’ai défini la valeur maximale à 2048 à cause de ce thread que j’ai trouvé en ligne qui indique que vous devez garder vos URL sous 2048 caractères:
Nous pouvons voir ce nouveau type de données SQL si nous nous dirigeons sur Object Explorer, sous programmabilité, Types, Types de données/div>
à partir de là, nous pouvons commencer à utiliser le type de données nouvellement créé., 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., Nous avons commencé avec un aperçu juste pour se familiariser avec certains des types de données intégrés. Ensuite, nous avons parlé de certaines choses à considérer lorsque vous travaillez avec des types de données et la conversion en utilisant les fonctions Cast, Convert et Parse. Nous avons également sauté dans SSMS où nous avons montré comment convertir une expression d’un type de données en un autre. Nous avons étudié comment travailler avec des colonnes clairsemées, puis nous avons également vu comment créer nos propres types de données personnalisés.
j’espère que cet article sur les types de données SQL a été instructif pour vous et je vous remercie de l’avoir lu.,
- auteur
- messages récents
il a beaucoup écrit sur SQL Shack et le centre de solutions ApexSQL, sur des sujets allant des technologies client comme la résolution et la thématisation 4K, la gestion des erreurs aux stratégies d’indexation et le suivi des performances.
Bojan travaille chez ApexSQL à Nis, en Serbie, en tant que partie intégrante de l’équipe se concentrant sur la conception, le développement et le test de la prochaine génération d’outils de base de données, y compris MySQL et SQL Server, ainsi que des outils autonomes et des intégrations dans Visual Studio, SSMS et VSCode.,
Voir plus sur Bojan à LinkedIn
Afficher tous les articles par Bojan Petrovic
- le Code de Visual Studio pour MySQL et MariaDB développement – le 13 août, 2020
- mise à JOUR SQL syntaxe, explique – 10 juillet 2020
- CRÉER une VUE SQL: Travailler avec les vues indexées dans SQL Server – 24 Mars 2020