SQLShack (Română)

SQLShack (Română)

Acest articol este despre diferite tipuri de date SQL care le folosim atunci când se lucrează cu SQL Server. Vom începe cu o privire de ansamblu rapidă și vom parcurge câteva lucruri precum categorii de tipuri de date, cu ce obiecte putem lucra și cum să creăm propriile tipuri de date personalizate.

SQL tipuri de date prezentare generală

pentru a lovi cu piciorul lucrurile off, să vorbim despre ceea ce este un tip de date. Dacă ar trebui să o definesc, aș spune că tipul de date determină tipul, dimensiunea și intervalul de date care pot fi stocate într-un obiect., Deci, acest lucru ne aduce la o chestiune de obiecte care au tipuri de date:

  • coloane
  • variabile
  • expresii
  • parametri

aceste patru tipuri de date SQL de obiecte sunt de cea mai mare importanță. Coloanele sunt, evident, pentru tabele. De fiecare dată când creăm o variabilă, trebuie să îi atribuim și un tip de date. Pe lângă acestea, avem expresii și parametri pentru a încheia lista obiectelor care vor conține date și, prin urmare, trebuie să specificăm ce fel de date vor conține.,Mergând mai departe, să vedem cele trei categorii de tipuri de date:

  • tipuri de date încorporate
  • tipuri de date alias definite de utilizator
  • tipuri de date runtime limbaj comun definit de utilizator (CLR)

nu sunt multe de spus despre prima categorie. Acestea sunt tipuri de date cu care suntem cu toții obișnuiți. Mai jos este o diagramă care listează bine cunoscute built-in tipuri de date și intervalele lor:

  • notă: Text, Ntext, și imagine SQL tipul de date vor fi eliminate într-o versiune viitoare a SQL Server. Este recomandabil să evitați utilizarea acestor tipuri de date în noile lucrări de dezvoltare., Utilizați varchar(max), nvarchar(max) și varbinary (max) tipuri de date în loc.

apoi, avem ceea ce am menționat la început, iar acestea sunt tipuri de date alias definite de utilizator care ne permit să ne creăm propriile tipuri de date pe baza listei încorporate de mai sus.

ultima categorie sunt tipurile de date common language runtime (CLR) definite de utilizator, care ne permit să creăm propriile tipuri de date utilizând.Net Framework., Acest lucru este un pic mai complicat decât cele de mai sus și necesită abilități de programare pentru a construi un ansamblu, a înregistra acel ansamblu în SQL Server, a crea un nou tip de date SQL bazat pe acel ansamblu și apoi putem începe să folosim tipul de date nou creat în SQL Server.

Considerații privind tipurile de date SQL

Să trecem la următoarea secțiune care este practic doar teorie, dar cu siguranță ceva la care ar trebui să vă gândiți atunci când stocați date fie permanent, fie temporar.,

conversie

ca dezvoltator de baze de date, una dintre cele mai comune rutine la scrierea codului este conversia. Conversia are loc atunci când datele de la un obiect este mutat, comparat sau combinat cu date de la un alt obiect. Aceste conversii se pot întâmpla automat, ceea ce numim conversie implicită în SQL Server sau manual, care este cunoscută sub numele de conversie explicită, ceea ce înseamnă practic scrierea codului special pentru a face ceva. O regulă utilă este că conversia explicită este întotdeauna mai bună decât conversia implicită, deoarece face Codul mai lizibil., Acum că vorbim despre conversii, merită menționat și lucrurile care ne pot ajuta cu conversia explicită, cum ar fi funcțiile CAST și CONVERT utilizate pentru a converti o expresie a unui tip de date SQL în altul.

GUID

GUID este un acronim pentru Global Unique Identifier. Este o modalitate de a garanta unicitatea și este unul dintre cele mai mari tipuri de date SQL. Singurul dezavantaj al GUID este dimensiunea de 16 octeți. Prin urmare, evitați indicii pe GUIDs cât mai mult posibil.

nul vs., Nu nul

dacă rămânem cu setările implicite SQL Server, care ar putea duce la unele probleme de integritate a datelor. Ar trebui să încercați întotdeauna să specificați proprietatea de nulitate ori de câte ori definiți coloane în tabele. Înapoi la elementele de bază, null înseamnă necunoscut sau lipsă, ceea ce înseamnă practic că nu este 0 sau un șir gol și nu putem face comparația nulă. Nu putem spune null = null. Acesta este un nu se poate face. Există o proprietate numită ANSI_NULLS pe care o putem seta și controla această comparație cu valorile nule.,

coloane rare

Acest tip de coloană este doar o coloană obișnuită în SQL Server, cu excepția unei proprietăți care este setată pe on și spune SQL Server să optimizeze acea coloană pentru stocarea nulă.

instrucțiuni privind tipul de date SQL

în primul rând, utilizați întotdeauna tipul de date potrivit pentru lucrare. Acest lucru este mult mai mare decât majoritatea oamenilor cred. Poate avea un impact semnificativ asupra eficienței, performanței, stocării și dezvoltării ulterioare a bazelor de date.dacă luăm primele două, Optimizatorul de interogare va genera un plan de execuție în funcție de tipurile de date utilizate., Un exemplu foarte simplu ar putea fi dacă folosim tipul de date bigint unde am putea folosi smallint – Ei bine, atunci, cel mai probabil, doar încetinim interogarea. Alegerea tipului de date SQL potrivit va duce în cele din urmă la optimizarea interogării care funcționează mai eficient.este o idee bună să furnizați documentație pentru dvs. și pentru ceilalți folosind baza de date privind tipurile de date care intră în obiecte. Este de la sine înțeles, dar evitați tipurile de date depreciate, verificați întotdeauna cea mai recentă documentație Microsoft pentru știri și actualizări., Dacă există o mică șansă să lucrați cu date non-engleze, utilizați întotdeauna tipuri de date Unicode. Mai mult, utilizați tipurile de date sysname pentru scripturile administrative peste nvarchar.

SQL data type examples

să trecem la SSMS și să vedem cum putem lucra cu unele dintre tipurile de date menționate în secțiunile anterioare. Vom parcurge conversii, coloane rare și tipuri de date alias.

conversie

funcțiile Cast, Convert și Parse convertesc o expresie a unui tip de date SQL în altul., Mai jos este o interogare exemplu care poate fi utilizat pe un eșantion de bază de date „AdventureWorks” împotriva tabelului „Tranzacționhistory”. E hapsân „ProductID” și „TransactionDate” de care ne putem folosi de asta data tranzacției pentru a vedea cât de conversie funcționează:

Aici este rezultatul set de diferite tipuri de date SQL:

Am folosit funcția Cast împotriva TransactionDate pentru a converti valorile de la un nvarchar la o lungime de 30. Apoi, am folosit Conversia pentru a face același lucru, dar apoi am specificat și formatul 110, care ne oferă un stil de dată specific., În cele din urmă, am folosit Parse care, în esență, funcționează la fel, dar putem aplica cultura la ea.,uita-te la rezultatul stabilit și să vedem ce avem:

  1. Aici avem data și ora tranzacției, deoarece se află în baza de date (tip de date datetime)
  2. Aici este ceea ce se pare ca atunci cand l-am aruncat ca o reprezentare a textului
  3. Conversie a face același lucru, dar în acest caz, suntem specificând modul în care a Converti funcție va traduce expresia (110 = mm-dd-yyyy)
  4. Analiză în acest caz, doar se traduce datele solicitate, utilizând cultură specifică (en-US)

apoi, hai sa vezi niste chestii care se pot face cu funcția de Parsare., Parse este excelent cu conversia șirurilor la date și numere întregi. De exemplu, dacă vom executa Select de mai jos, se va apuca șir 100.000 și să-l transforme într-un întreg:

1
SELECTAȚI PARSE(‘100.,000’ CA INT) CA StringToInt;

Aici este setul de rezultate:

Acum, să zicem că vrem să facem același lucru din nou, dar pentru un motiv oarecare, întreg are un caracter în care SQL Server nu poate converti la un număr întreg:

1
SELECTAȚI PARSE(’10O.,000′ CA INT) CA StringToIntError;

Aici este mesajul de eroare pe care-l aruncă:

Msg 9819, Nivel 16, Stat 1, Linia 2
Eroare de conversie string value ’10O.000′ în date de tip int, folosind cultura „.,

Deci, ce putem face în acest caz este de a utiliza Try_Parse în loc de regulat Analiza pentru că dacă vom încerca același lucru de mai sus, se va returna o valoare nulă, mai degrabă decât de eroare:

1
SELECTAȚI TRY_PARSE(’10O.,000′ CA INT) CA StringToIntNull;

Aici este ceea ce pare:

Această metodă poate fi folosit ca un identificator dacă ceva ar eroare înainte de a AKA defensive de codificare. Încercările pot fi aplicate și pentru celelalte două tipuri de date SQL.

coloane rare

așa cum am menționat la început, coloanele rare reduc cerințele de spațiu 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 bom;

Observați că există o mulțime de valori null în ProductAssemblyID și EndDate coloane:

prin Urmare, putem spune că aceste două sunt buni candidați pentru rare coloane., Deci, o modalitate de a schimba acest lucru este de a schimba pur și simplu proprietate în designer sau o putem face folosind cod T-SQL de mai jos:

1
2
3
4

ALTER TABLE de Producție.BillOfMaterials modifica coloana ProductAssemblyID adăuga rare;
du-te
ALTER tabelul de producție.,BillOfMaterials MODIFICA COLOANA EndDate ADAUGA RARE;
GO

Comenzi nu s-a finalizat cu succes de prima dată, așa că a trebuit să-și piardă cluster de index (linia 7) si apoi totul a mers smooth:

Dacă ne întoarcem la Obiect Explorer, refresh BillOfMaterials masă, putem vedea că cele două sunt marcate ca fiind rare coloane:

Frumos, dreptate. Un lucru mai elegant despre coloanele rare se numește seturi de coloane., Acest lucru este util într-o situație atunci când avem un tabel care conține o grămadă de destinație specială coloane, care sunt rareori folosite ca în exemplul nostru ProductAssemblyID și EndDate coloane sau AddressLine2, MiddleName, etc. Deci, ideea cu setul de coloane este că SQL Server va lua toate acele coloane și ne va oferi o coloană XML generată care poate fi actualizată. Acest lucru poate duce la o creștere a performanței aplicației, deoarece SQL Server poate lucra cu setul de coloane, mai degrabă decât cu fiecare coloană rară individual.,

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

1
2
3

ALTER TABLE Production.,BillOfMaterials
ADĂUGARE SparseColumns XML COLUMN_SET PENTRU ALL_SPARSE_COLUMNS;
GO

Deci, dacă am încerca să adăugați un set de coloane, dar masa noastră are deja rare coloane, se vor eroare:

Msg 1734, Nivel 16, De stat 1, Linia 9
nu Poate crea rare set de coloane ‘SparseColumns’ în masă ‘BillOfMaterials pentru că tabelul conține deja unul sau mai rare coloane. Un set de coloane rare nu poate fi adăugat la un tabel dacă tabelul conține o coloană rară.,

dacă întâlniți vreodată acest lucru, cea mai ușoară soluție este să anulați coloanele rare. Acest lucru se poate face cu ușurință în designer. Deschis de la Obiect Explorer, selectați coloana de care aveți nevoie, și în coloana proprietăți schimba Este Analiza de proprietate să Nu așa cum se arată mai jos:

Acum, dacă vom executa comanda de mai mult timp, acesta va fi de succes:

linia De jos aici, nu adăugați rare coloane primul – adăugați coloana stabilește mai întâi și apoi sparse coloane. În acest fel nu va trebui să o faci pe calea cea grea., Ceea ce este cu adevărat îngrijit în acest sens, declarațiile noastre DML, cum ar fi Select, Insert și Update, pot funcționa în continuare vechiul mod prin referirea individuală a coloanelor sau o putem face folosind seturile de coloane.

tipuri de date SQL definite de utilizator

să încheiem lucrurile cu crearea unui tip de date personalizat. Vom crea un tip de date alias care se bazează pe un alt tip de date. Să spunem doar că avem nevoie de stocarea adreselor URL în tabelul nostru și dorim să creăm un tip de date 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., Am setat valoarea maximă de 2048 pentru că de acest thread ca am gasit on-line, care afirmă că ar trebui să păstrați Url-uri sub 2048 de caractere:

putem vedea acest nou tip de date SQL dacă am peste cap de Obiect Explorer, sub Programabilitate, Tipuri Definite de Utilizator Tipuri de Date folder:

De aici, putem începe să utilizați nou create tip de date., 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., Am început cu o imagine de ansamblu doar pentru a ne familiariza cu unele dintre tipurile de date încorporate. Apoi am vorbit despre câteva lucruri de luat în considerare atunci când lucrăm cu tipuri de date și conversie folosind funcții Cast, Convert și Parse. De asemenea, am sărit în SSMS unde am arătat cum să convertim o expresie a unui tip de date în altul. Am trecut prin modul de lucru cu coloane rare și apoi am văzut și cum să ne creăm propriile tipuri de date personalizate.sper că acest articol despre tipurile de date SQL a fost informativ pentru dvs. și vă mulțumesc că l-ați citit.,

  • Autor
  • Mesajele Recente
Bojan aka „Boksi”, un AP absolvent în Tehnologia IT axate pe Rețelele electronice și tehnologia din Copenhagen School of Design și Tehnologie, este un analist de software cu experiență în asigurarea calității, suport software, produs de evanghelizare, și implicarea utilizatorilor.,
El a scris pe larg pe ambele SQL Colibă și ApexSQL Centrul de Soluții, pe teme variind de la client tehnologii, cum ar fi rezoluție 4K și temelor, eroare de manipulare a indicelui de strategii, și de monitorizare a performanței.
Bojan lucrează la ApexSQL în Nis, Serbia, ca parte integrantă a echipei concentrându-se pe proiectarea, dezvoltarea, testarea și următoarea generație de instrumente de baze de date, inclusiv MySQL și SQL Server, și atât stand-alone de instrumente și integrarea în Visual Studio, SSMS, și VSCode.,
Vezi mai multe despre Bojan la LinkedIn
Vezi toate posturile de Bojan Petrovic

Ultimele posturi de Bojan Petrovic (vezi toate)
  • Cod Visual Studio pentru MySQL și MariaDB de dezvoltare – 13 August 2020
  • SQL UPDATE sintaxa explicat – 10 iulie, în 2020,
  • CREARE VIZUALIZARE SQL: de Lucru cu vizualizări indexate în SQL Server – 24 Martie, în 2020,

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *