SQLShack (Dansk)

SQLShack (Dansk)

Denne artikel handler om mange forskellige SQL-datatyper, som vi bruger, når du arbejder med SQL Server. Vi starter med et hurtigt overblik og gennemgår nogle ting som kategorier af datatyper, hvilke objekter vi kan arbejde med, og hvordan vi opretter vores egne tilpassede datatyper.

s .l datatyper oversigt

for at starte tingene, lad os tale om, hvad der er en datatype. Hvis jeg skulle definere det, ville jeg sige, at datatypen bestemmer typen, størrelsen og rækkevidden af data, der kan gemmes i et objekt., Så, dette bringer os til et spørgsmål om objekter, der har data typer:

  • Kolonner
  • Variabler
  • Udtryk
  • Parametre

Disse fire SQL data typer af objekter, der er af den største betydning. Kolonner er naturligvis for tabeller. Hver gang vi opretter en variabel, skal vi også tildele en datatype til den. Ud over dem har vi udtryk og parametre til at afslutte listen over objekter, der skal indeholde data, og derfor er vi nødt til at specificere, hvilken slags data de vil indeholde.,lad os se de tre kategorier af datatyper:

  • indbyggede datatyper
  • brugerdefineret alias datatyper
  • brugerdefineret common language runtime (CLR) datatyper

Der er ikke meget at sige om den første kategori. Dette er datatyper, som vi alle er vant til. Nedenfor er et diagram, der viser velkendte indbyggede datatyper og deres intervaller:

  • Bemærk: tekst, Nte .t og billede s .l-datatype fjernes i en fremtidig version af s .l Server. Det anbefales at undgå at bruge disse datatyper i nyt udviklingsarbejde., Brug varchar(ma.), nvarchar(MA.), og varbinary (ma.) datatyper i stedet.

Dernæst har vi det, vi nævnte i begyndelsen, og det er brugerdefinerede aliasdatatyper, der giver os mulighed for at oprette vores egne datatyper baseret på den indbyggede liste ovenfor.

den sidste kategori er brugerdefinerede common language runtime (CLR) datatyper, der giver os mulighed for at oprette vores egne datatyper ved hjælp af.Net Frame .ork., Dette er lidt mere kompliceret end ovenstående og kræver programmeringsevner for at opbygge en samling, registrere denne samling inde i s .l Server, oprette en ny S .l-datatype baseret på den samling, og så kan vi begynde at bruge den nyoprettede datatype i s .l Server.

s .l-datatyper overvejelser

lad os gå videre til næste afsnit, som stort set kun er teori, men bestemt noget, du bør tænke på, når du lagrer data enten permanent eller midlertidigt.,

konvertering

som databaseudvikler konverterer en af de mest almindelige rutiner, når du skriver kode. Konvertering finder sted, når data fra et objekt flyttes, sammenlignes eller kombineres med data fra et andet objekt. Disse konverteringer kan ske automatisk, hvad vi kalder Implicit konvertering I s .l Server eller manuelt, der er kendt som eksplicit konvertering, som dybest set betyder at skrive kode specifikt til at gøre noget. En nyttig tommelfingerregel er, at eksplicit konvertering altid er bedre end implicit konvertering, fordi det gør koden mere læsbar., Nu hvor vi taler om konverteringer, er det også værd at nævne de ting, der kan hjælpe os med den eksplicitte konvertering som CAST og konverter funktioner, der bruges til at konvertere et udtryk for en s .l-datatype til en anden.

GUID

GUID er et akronym for globalt unik identifikator. Det er en måde at garantere unikhed på, og det er en af de største s .l-datatyper. Den eneste ulempe ved GUID er 16 bytes i størrelse. Undgå derfor indekser på GUID ‘ er så meget som muligt.

NULL vs., IKKE NULL

Hvis du holder fast i s .l Server standardindstillinger, kan det føre til nogle dataintegritetsproblemer. Du bør altid forsøge at angive nullability-egenskaben, når du definerer kolonner i tabeller. Tilbage til det grundlæggende betyder null ukendt eller manglende, hvilket dybest set betyder, at det ikke er 0 eller en tom streng, og vi kan ikke foretage null-sammenligningen. Vi kan ikke sige null = null. Dette er et nej kan gøre. Der er en egenskab kaldet ANSI_NULLS, som vi kan indstille og kontrollere denne sammenligning med null-værdier.,

sparsomme kolonner

denne type kolonne er kun en almindelig kolonne i s .l Server bortset fra en egenskab, der er indstillet til til, og den fortæller s .l Server at optimere denne kolonne til null-opbevaring.

s .l datatype retningslinjer

først og fremmest skal du altid bruge den rigtige datatype til jobbet. Dette er meget større end de fleste mennesker tror. Det kan have en betydelig indflydelse på effektivitet, ydeevne, opbevaring og yderligere databaseudvikling.

Hvis vi tager de to første, vil queryuery optimi .er generere en eksekveringsplan afhængigt af hvilke datatyper der bruges., Et meget simpelt eksempel kan være, hvis vi bruger bigint – datatypen, hvor vi kunne bruge smallint-ja, så er vi sandsynligvis bare ved at bremse forespørgslen. At vælge den rigtige s .l-datatype vil i sidste ende resultere i, at queryuery optimi .er fungerer mere effektivt.

det er en god ide at fremlægge dokumentation for dig selv og andre ved hjælp af databasen om datatyper, der går ind i objekterne. Det siger sig selv, men undgå forældede datatyper, kontroller altid Microsofts seneste dokumentation for nyheder og opdateringer., Hvis der er en lille chance for, at du vil arbejde med ikke-engelske data, skal du altid bruge Unicode-datatyper. Desuden, bruge sysname datatyper for de administrative scripts over nvarchar.

s .l datatype eksempler

lad os hoppe over til SSMS og se, hvordan vi kan arbejde med nogle af de datatyper, der er nævnt i de foregående afsnit. Vi gennemgår konverteringer, sparsomme kolonner og alias-datatyper.

konvertering

Cast, konverter og Parse funktioner Konverter et udtryk for en s .l-datatype til en anden., Nedenfor er et eksempel forespørgsel, der kan bruges på en prøve “Adventure .orks” database mod tabellen “TransactionHistory”. Det griber fat i “ProductID” og “TransactionDate”, hvorfra vi kan bruge denne Dato for transaktionen til at se, hvordan konvertering fungerer:

Her er resultatet af forskellige S .l-datatyper:

Vi brugte Cast-funktionen mod TransactionDate til at konvertere værdier til en nvarchar til en længde på 30. Dernæst brugte vi Konverter til at gøre det samme, men så specificerede vi også formatet 110, som giver os en bestemt datostil., Sidst brugte vi Parse, som i det væsentlige fungerer det samme, men vi kan anvende kultur til det.,kig på resultatet og se, hvad vi fik:

  1. Her har vi en dato og tidspunkt for transaktionen, da det sidder i databasen (datetime data type)
  2. Her er hvad det ser ud, når vi kaster den som en tekst repræsentation
  3. Konvertering gør de samme ting, men i dette tilfælde, vi præciserer, hvordan Konvertere funktion, vil oversætte udtryk (110 = mm-dd-åååå)
  4. Parsing i dette tilfælde, bare oversætter ønskede data ved hjælp af særlige kultur (en-US)

Næste, lad os se nogle ekstra ting, som vi kan gøre med den Parse funktion., Parse er fantastisk med at konvertere strenge til datoer og heltal. For eksempel, hvis vi udfører Select-sætningen nedenfor, vil den gribe strengen 100.000 og omdanne den til et heltal:

1
vælg parse(‘100.,000 ” SOM INT) SOM StringToInt;

Her er resultatet:

Nu, lad os sige, at vi ønsker at gøre det samme igen, men for nogle grund, det heltal, der er et tegn i det, at SQL Server kan ikke konverteres til et heltal:

1
VÆLG PARSE(’10º.,000 ‘ Som INT) som StringToIntError;

Her er den fejlmeddelelse, den kaster:

Msg 9819, niveau 16, stat 1, Linje 2
fejl ved konvertering af strengværdi ’10O.000′ til datatype int ved hjælp af kultur “.,

Så hvad vi kan gøre i dette tilfælde er at bruge Try_Parse i stedet for regelmæssig Parse, fordi hvis vi prøver den samme ting ovenfra, returnerer den en null-værdi snarere end fejlen:

1
vælg try_parse(’10o.,000 ‘ Som INT) som StringToIntNull;

Her er hvordan det ser ud:

denne metode kan bruges som en identifikator, hvis noget ville fejl ud før tid AKA defensiv kodning. Forsøg kan også anvendes til de to andre s .l-datatyper.

sparsomme kolonner

som jeg nævnte i begyndelsen reducerer sparsomme kolonner null-pladsbehov., 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.,Billofmaterialer bom;

Bemærk, at der er mange null-værdier inden for produktetassemblyid og EndDate kolonner:

derfor kan vi sige, at disse værdier ikke er to er gode kandidater til sparsomme kolonner., Så en måde at ændre dette på er blot at ændre ejendommen i designeren, eller vi kan gøre det ved hjælp af T-s :l-koden nedenunder:

1
2
3
4

Alter Table production.Billofmaterialer ALTER COLUMN ProductAssemblyID Tilføj sparsom;
ALTER TABLE Production.,Billofmaterialer ALTER COLUMN EndDate Tilføj sparsom;

kommandoer afsluttede ikke med succes første gang, så jeg måtte miste det grupperede indeks (linje 7), og så gik alt glat:

Hvis vi går tilbage til object e .plorer, skal du opdatere billofmaterials-tabellen, vi kan se, at disse to nu er markeret som sparsomme kolonner:

nice, højre. En mere pæn ting om sparsomme kolonner kaldes kolonnesæt., Dette er nyttigt i en situation, hvor vi har en tabel, der indeholder en masse specielle formål kolonner, der sjældent bruges som i vores eksempel ProductAssemblyID og EndDate kolonner eller AddressLine2, MiddleName, etc. Så ideen med kolonnesættet er, at s .l Server vil tage alle disse kolonner og give os en genereret columnml-kolonne, der kan opdateres. Dette kan føre til et ydelsesforøgelse af applikationen, fordi s .l Server kan arbejde med kolonnesættet snarere end med hver sparsom kolonne individuelt.,

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

1
2
3

ALTER TABLE Production.,Billofmaterialer
Tilføj SparseColumns COLUMML COLUMN_SET for ALL_SPARSE_COLUMNS;

så hvis vi forsøger at tilføje et kolonnesæt, men vores tabel allerede har sparsomme kolonner, vil det Fejl ud:

MSG 1734, level 16, state 1, line 9
kan ikke oprette det sparsomme kolonnesæt ‘SPARSECOLUMNS’ i tabellen ‘billofmaterialer’, fordi tabellen allerede indeholder en eller flere sparsomme kolonner. Et sparsomt kolonnesæt kan ikke føjes til en tabel, hvis tabellen indeholder en sparsom kolonne.,

Hvis du nogensinde støder på dette, er den nemmeste løsning at fortryde sparsomme kolonner. Dette kan nemt gøres i designeren. Bare åbne det op fra Object Explorer, skal du vælge den kolonne, som du har brug for, og inden for den kolonne, egenskaber ændrer det Er Parse ejendom til Ikke som vist nedenfor:

Nu, hvis vi udføre kommandoen, en gang mere, det vil blive en succes:

Den nederste linje her, ikke tilføje sparsomme kolonner første – tilføj kolonne angiver første og derefter sparsomme kolonner. På den måde behøver du ikke at gøre det på den hårde måde., Hvad er rigtig pænt om denne, vores DML udsagn som Select, Insert og Update kan stadig arbejde på den gamle måde, ved at referere til kolonnerne individuelt eller vi kan gøre det ved hjælp af kolonnen angiver.

brugerdefinerede s .l-datatyper

lad os pakke tingene sammen med at oprette en brugerdefineret datatype. Vi opretter en alias-datatype, der er baseret på en anden datatype. Lad os bare sige, at vi har behov for at gemme Urebadresser i vores tabel, og vi ønsker at oprette en faktisk URL-datatype., 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., Jeg har indstillet den maksimale værdi til 2048 på grund af denne tråd, som jeg har fundet online, som siger, at du skal holde dine Urebadresser under 2048 tegn:

Vi kan se denne nye S 20L-datatype, hvis vi går over Object e dataplorer, under programmerbarhed, typer, brugerdefinerede datatyper mappe:

herfra kan vi begynde at bruge den nyoprettede datatype., 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., Vi startede med et overblik bare for at blive fortrolig med nogle af de indbyggede datatyper. Så talte vi om nogle ting at overveje, når man arbejder med datatyper og konvertering ved hjælp af Cast, konverter og Parse funktioner. Vi sprang også ind i SSMS, hvor vi viste, hvordan man konverterer et udtryk for en datatype til en anden. Vi gik igennem, hvordan man arbejder med sparsomme kolonner, og så så vi også, hvordan man opretter vores egne brugerdefinerede datatyper.

Jeg håber, at denne artikel om S .l-datatyper har været informativ for dig, og jeg takker dig for at have læst den.,

  • forfatter
  • Seneste indlæg
Bojan alias “boksi”, en AP-kandidat i IT-teknologi med fokus på Netværk og elektronisk teknologi fra Copenhagen School of design and technology, er en soft .areanalytiker med erfaring inden for kvalitetssikring, soft .aresupport, produktevangelisering og brugerengagement.,
han har skrevet udførligt om både S .l Shack og APE .s .l Solution Center, om emner lige fra klientteknologier som 4K-opløsning og temaer, fejlhåndtering til indeksstrategier og præstationsovervågning.Bojan arbejder hos Ape .s .l i Nis, Serbien som en integreret del af teamet med fokus på at designe, udvikle og teste den næste generation af databaseværktøjer, herunder Mys .l og S .l Server, og både selvstændige værktøjer og integrationer i Visual Studio, SSMS og VSCode.,
Se mere om Bojan på LinkedIn
Vis alle indlæg af Bojan Petrovic

Seneste indlæg af Bojan Petrovic (se alle)
  • Visual Studio Kode for MySQL og MariaDB udvikling – August 13, 2020
  • SQL UPDATE syntaks forklaret – juli 10, 2020
  • OPRET UDSIGT SQL: Arbejde med indekseret synspunkter i SQL Server – 24 Marts 2020

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *