Dit artikel gaat over veel verschillende SQL data types die we gebruiken bij het werken met SQL Server. We zullen beginnen met een snel overzicht en gaan door een aantal dingen zoals categorieën van data types, welke objecten we kunnen werken met, en hoe we onze eigen aangepaste data types te creëren.
SQL data types overview
om te beginnen, laten we het hebben over wat een data type is. Als ik het moest definiëren, zou ik zeggen dat het gegevenstype het soort, De grootte en het bereik van gegevens bepaalt die in een object kunnen worden opgeslagen., Dit brengt ons bij een kwestie van objecten met gegevenstypen:
- kolommen
- variabelen
- expressies
- Parameters
deze vier SQL-gegevenstypen van objecten zijn van het grootste belang. Kolommen zijn uiteraard voor tabellen. Elke keer dat we een variabele maken, moeten we er ook een gegevenstype aan toewijzen. Naast die, we hebben uitdrukkingen en parameters om de lijst van objecten die gaan om gegevens te houden af te sluiten en daarom moeten we specificeren wat voor soort gegevens ze zullen bevatten.,
verder gaan, laten we eens kijken naar de drie categorieën van data types:
- ingebouwde data types
- User-defined alias data types
- User-defined common language runtime (CLR) data types
Er is niet veel te zeggen over de eerste categorie. Dit zijn gegevenstypen die we allemaal gewend zijn. Hieronder is een grafiek met bekende ingebouwde gegevenstypen en hun bereiken:
- opmerking: tekst, ntext en Image SQL gegevenstype zullen worden verwijderd in een toekomstige versie van SQL Server. Het is raadzaam om het gebruik van deze gegevenstypen in nieuwe ontwikkelingswerkzaamheden te vermijden., Gebruik in plaats daarvan varchar(max), nvarchar(max), en varbinary(max) gegevenstypen.
vervolgens hebben we wat we aan het begin hebben genoemd, en dat zijn door de gebruiker gedefinieerde alias gegevenstypen die ons in staat stellen om onze eigen gegevenstypen te maken op basis van de ingebouwde lijst hierboven.
de laatste categorie zijn door de gebruiker gedefinieerde common language runtime (CLR) gegevenstypen die ons in staat stellen om onze eigen gegevenstypen te maken met behulp van het.NET Framework., Dit is een beetje ingewikkelder dan het bovenstaande en vereist programmeervaardigheden om een assembly te bouwen, die assembly te registreren binnen de SQL Server, een nieuw SQL data type te maken op basis van die assembly en dan kunnen we beginnen met het nieuw aangemaakte data type in SQL Server.
SQL data types overwegingen
laten we verder gaan met de volgende sectie die in principe alleen theorie is, maar zeker iets waar je over moet nadenken bij het Permanent of Tijdelijk opslaan van data.,
conversie
als een database Ontwikkelaar, een van de meest voorkomende routines bij het schrijven van code is het converteren. Conversie vindt plaats wanneer gegevens van een object worden verplaatst, vergeleken of gecombineerd met gegevens van een ander object. Deze conversies kunnen automatisch gebeuren, wat we impliciete conversie in SQL Server noemen of handmatig dat bekend staat als expliciete conversie, wat in principe betekent dat code specifiek geschreven wordt om iets te doen. Een handige vuistregel is dat expliciete conversie altijd beter is dan impliciete conversie omdat het code leesbaarder maakt., Nu we het hebben over conversies, ook het vermelden waard is de dingen die ons kunnen helpen met de expliciete conversie zoals CAST en CONVERT functies gebruikt om een expressie van een SQL data type converteren naar een andere.
GUID
GUID is een acroniem voor Globally Unique Identifier. Het is een manier om uniciteit te garanderen en het is een van de grootste SQL-gegevenstypen. Het enige nadeel van GUID is de 16 bytes in grootte. Vermijd daarom zoveel mogelijk indexen op GUIDs.
NULL vs., Niet NULL
Als u zich aan de standaardwaarden van SQL Server houdt, kan dat leiden tot problemen met gegevensintegriteit. Je moet altijd proberen om de eigenschap nulbaarheid op te geven wanneer je kolommen in tabellen definieert. Terug naar de basis, null betekent onbekend of ontbrekend wat in principe betekent dat het geen 0 of een lege tekenreeks is, en we kunnen de null-vergelijking niet doen. We kunnen niet zeggen null = null. Dit is een nee kan doen. Er is een eigenschap genaamd ANSI_NULLS die we kunnen instellen en controleren deze vergelijking met null waarden.,
Sparse columns
Dit type kolom is slechts een gewone kolom in SQL Server behalve voor een eigenschap die is ingesteld op aan en het vertelt SQL Server om die kolom te optimaliseren voor null-opslag.
SQL data type guidelines
allereerst, Gebruik altijd het juiste gegevenstype voor de taak. Dit is veel groter dan de meeste mensen denken. Het kan een aanzienlijke impact hebben op efficiëntie, prestaties, opslag en verdere database-ontwikkeling.
als we de eerste twee nemen, zal de query optimizer een uitvoeringsplan genereren, afhankelijk van welke gegevenstypen worden gebruikt., Een heel eenvoudig voorbeeld zou kunnen zijn als we het bigint-gegevenstype gebruiken waar we de smallint zouden kunnen gebruiken-goed dan, we zijn het meest waarschijnlijk gewoon het vertragen van de query. Het kiezen van het juiste SQL-gegevenstype zal uiteindelijk resulteren in query optimizer efficiënter werken.
Het is een goed idee om documentatie aan te bieden voor uzelf en anderen met behulp van de database over gegevenstypen die in de objecten gaan. Het spreekt voor zich, maar vermijd verouderde gegevenstypen, Controleer altijd Microsoft ‘ s nieuwste documentatie voor het nieuws en updates., Als er een kleine kans is dat je gaat werken met niet-Engelse gegevens, Gebruik altijd Unicode-gegevenstypen. Verder, gebruik de sysname data types voor de administratieve scripts over de nvarchar.
SQL data type voorbeelden
laten we naar SSM ‘ s springen en zien hoe we kunnen werken met enkele van de gegevenstypen die in de vorige secties worden genoemd. We gaan door conversies, dunne kolommen, en alias data types.
conversie
Cast, Convert en Parse functies converteren een expressie van een SQL-gegevenstype naar een ander., Hieronder is een voorbeeld query die kan worden gebruikt op een voorbeeld “AdventureWorks” database tegen de “TransactionHistory” tabel. Het is grabbing “ProductID” en “TransactionDate”van waaruit we die datum van de transactie kunnen gebruiken om te zien hoe conversie werkt:
Hier is de result set van verschillende SQL Data types:
We gebruikten de Cast functie tegen TransactionDate om waarden om te zetten naar een nvarchar naar een lengte van 30. Vervolgens hebben we converteren gebruikt om hetzelfde te doen, maar daarna hebben we ook het formaat 110 gespecificeerd dat ons een specifieke datumstijl geeft., Ten slotte gebruikten we Parse die in wezen hetzelfde werkt, maar we kunnen er cultuur op Toepassen.,kijk naar het resultaat en zien we het volgende:
- Hier hebben we de datum en tijd van de transactie, het ligt binnen de database (gegevenstype datetime)
- Hier is hoe het eruit ziet wanneer we werpen als een tekst weergave
- Omzetten doet hetzelfde, maar in dit geval, we zijn aan te geven hoe de functie Converteren zal vertalen expressie (110 = mm-dd-jjjj)
- het Parseren van in dit geval net vertaalt gevraagde gegevens met behulp van specifieke cultuur (en-US)
Vervolgens laten we zien een aantal extra dingen die we kunnen doen met de Parse-functie., Parse is geweldig met het omzetten van strings naar datums en gehele getallen. Als we bijvoorbeeld het uitvoeren van de Select-instructie hieronder zal grijpen de string 100.000 en zet hem in een geheel getal:
1
|
SELECTEER PARSE(‘100.,000’ INT) ALS StringToInt;
|
Hier is het resultaat:
Nu, laten we zeggen dat we willen weer hetzelfde doen, maar voor sommige reden, het geheel heeft een karakter die u in het SQL Server kan niet worden geconverteerd naar een geheel getal:
1
|
SELECTEER PARSE(’10O.,000 ‘AS int) AS StringToIntError;
|
Hier is de foutmelding die het geeft:
Msg 9819, niveau 16, Status 1, Regel 2
Fout bij het converteren van stringwaarde ’10O.000′ naar gegevenstype int met behulp van cultuur”.,
Dus, wat kunnen wij doen in dit geval is het gebruik van Try_Parse in plaats van de reguliere Ontleden, want als we proberen het zelfde ding van hierboven, wordt een null-waarde in plaats van de fout:
1
|
SELECTEER TRY_PARSE(’10O.,000 ‘AS int) AS StringToIntNull;
|
Hier is hoe het eruit ziet:
Deze methode kan worden gebruikt als een identifier als er van tevoren iets fout zou lopen, ook bekend als defensieve codering. Pogingen kunnen ook worden toegepast voor de andere twee SQL-gegevenstypen.
schaarse kolommen
zoals ik aan het begin al zei, verminderen schaarse kolommen null spatievereisten., 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.,Billofmaterialen bom;
|
merk op dat er veel null-waarden in de kolommen ProductAssemblyID en einddatum zijn:
daarom kunnen we zeggen dat deze twee zijn goede kandidaten voor schaarse Columns., Dus is het een manier om dit te veranderen is om gewoon de eigenschap wijzigen in het designer of kunnen we doen met behulp van de T-SQL code hieronder in:
1
2
3
4
|
ALTER TABLE Productie.Billofmaterialen ALTER COLUMN ProductAssemblyID voeg SPARSE;
GO
ALTER TABELPRODUCTIE.,BillOfMaterials ALTER COLUMN EndDate ADD SPARSE;
GO
|
opdrachten zijn de eerste keer niet succesvol voltooid, dus moest ik de geclusterde index (regel 7) verliezen en daarna ging alles glad:
als we teruggaan naar Object Explorer, de billofmaterials tabel verversen, kunnen we zien dat deze twee nu gemarkeerd zijn als schaarse kolommen:
nice, rechts. Nog een leuk ding over sparse kolommen wordt genoemd kolom sets., Dit is handig in een situatie waarin we een tabel hebben die een aantal speciale kolommen bevat die zelden worden gebruikt, zoals in ons voorbeeld productassemblyid en EndDate kolommen of AddressLine2, MiddleName, enz. Dus, het idee met de kolom set is dat SQL Server al die kolommen zal nemen en ons een gegenereerde XML kolom die updateable. Dit kan leiden tot een performance boost van de toepassing omdat SQL Server kan werken met de kolom set in plaats van met elke dunne kolom afzonderlijk.,
So, let’s add a column set using those two examples from above using the following command:
1
2
3
|
ALTER TABLE Production.,BillOfMaterials
TOEVOEGEN SparseColumns XML COLUMN_SET VOOR ALL_SPARSE_COLUMNS;
GO
|
Dus, als we proberen het toevoegen van een kolom instellen, maar onze tafel al heeft verspreid kolommen, het zal fout uit:
Msg 1734, Level 16, Staat 1, Regel 9
Kan het maken van de schaarse kolom set ‘SparseColumns’ in de tabel ‘BillOfMaterials’ omdat de tabel bevat reeds een of meer verspreide kolommen. Een sparse kolom set kan niet worden toegevoegd aan een tabel als de tabel bevat een sparse kolom.,
Als u dit ooit tegenkomt, is de makkelijkste oplossing om schaarse kolommen ongedaan te maken. Dit kan gemakkelijk worden gedaan in de ontwerper. Open het gewoon vanuit de Objectverkenner, selecteer de kolom die u nodig hebt, en verander binnen de kolom eigenschappen de eigenschap is Parse in No zoals hieronder getoond:
nu, als we het commando nog een keer uitvoeren, zal het succesvol zijn:
de onderste regel hier, voeg niet eerst dunne kolommen toe – Voeg kolom sets eerst en vervolgens sparse kolommen. Dan hoef je het niet op de moeilijke manier te doen., Wat hier echt leuk aan is, onze DML statements zoals Select, Insert en Update kunnen nog steeds op de oude manier werken door de kolommen afzonderlijk te verwijzen of we kunnen het doen met behulp van de kolom sets.
door de gebruiker gedefinieerde SQL-gegevenstypen
laten we afronden met het maken van een aangepast gegevenstype. We gaan een alias-gegevenstype maken dat gebaseerd is op een ander gegevenstype. Laten we gewoon zeggen dat we een behoefte hebben voor het opslaan van URL ‘ s in onze tabel en we willen een werkelijke URL data type te creëren., 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., Ik heb de maximale waarde ingesteld op 2048 vanwege deze thread die ik online heb gevonden, waarin staat dat u uw URL ‘ s Onder 2048 karakters moet houden:
We kunnen dit nieuwe SQL-gegevenstype zien als we over Object Explorer gaan, onder Programmability, Types, User-Defined Data Types folder:
vanaf hier kunnen we het nieuw aangemaakte gegevenstype gebruiken., 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., We begonnen met een overzicht om vertrouwd te raken met enkele van de ingebouwde gegevenstypen. Toen spraken we over een aantal dingen te overwegen bij het werken met data types en conversie met behulp van Cast, converteren en ontleden functies. We sprongen ook in SSM ‘ s waar we lieten zien hoe een expressie van het ene gegevenstype naar het andere te converteren. We gingen door hoe te werken met schaarse kolommen, en toen zagen we ook hoe we onze eigen aangepaste gegevenstypen te maken.
Ik hoop dat dit artikel over SQL-gegevenstypen informatief voor u is geweest en ik dank u voor het lezen ervan.,
- Auteur
- Laatste Berichten
hij heeft uitgebreid geschreven over zowel de SQL Shack als het ApexSQL Solution Center, over onderwerpen variërend van klanttechnologieën zoals 4K-resolutie en themering, foutafhandeling tot indexstrategieën en prestatiebewaking.Bojan werkt bij ApexSQL in Nis, Servië als een integraal onderdeel van het team dat zich richt op het ontwerpen, ontwikkelen en testen van de volgende generatie databasetools, waaronder MySQL en SQL Server, en zowel stand-alone tools als integraties in Visual Studio, SSMS en VSCode.,
Zie voor meer informatie over Bojan op LinkedIn
Bekijk alle berichten van Bojan Petrovic
- Visual Studio Code voor MySQL en MariaDB ontwikkeling – 13 augustus 2020
- SQL UPDATE-syntaxis uitgelegd – juli 10, 2020
- het MAKEN van SQL WEERGEVEN: Werken met geïndexeerde weergaven in SQL Server – 24 Maart 2020