sqlshack (Polski)

sqlshack (Polski)

Ten artykuł dotyczy wielu różnych typów danych SQL, których używamy podczas pracy z serwerem SQL. Zaczniemy od szybkiego przeglądu i przejrzymy niektóre rzeczy, takie jak Kategorie typów danych, z jakimi obiektami możemy pracować i jak tworzyć własne niestandardowe typy danych.

przegląd typów danych SQL

aby rozpocząć, porozmawiajmy o tym, co to jest typ danych. Gdybym miał go zdefiniować, powiedziałbym, że typ danych określa rodzaj, rozmiar i zakres danych, które mogą być przechowywane w obiekcie., Tak więc, prowadzi nas to do pytania o obiekty, które mają typy danych:

  • kolumny
  • zmienne
  • wyrażenia
  • parametry

te cztery typy danych SQL obiektów mają najwyższe znaczenie. Kolumny są oczywiście dla tabel. Za każdym razem, gdy tworzymy zmienną, musimy również przypisać do niej typ danych. Oprócz tych, mamy wyrażenia i parametry, aby zakończyć listę obiektów, które mają zawierać dane i dlatego musimy określić, jakiego rodzaju dane będą zawierać.,

przejdźmy do trzech kategorii typów danych:

  • wbudowane typy danych
  • aliasy zdefiniowane przez użytkownika
  • typy danych zdefiniowane przez użytkownika common language runtime (CLR)

nie ma wiele do powiedzenia o pierwszej kategorii. Są to typy danych, do których wszyscy jesteśmy przyzwyczajeni. Poniżej znajduje się Wykres z listą dobrze znanych wbudowanych typów danych i ich zakresów:

  • Uwaga: typ danych SQL tekst, Ntext i Image zostanie usunięty w przyszłej wersji SQL Server. Zaleca się unikanie używania tych typów danych w nowych pracach programistycznych., Zamiast tego używa typów danych varchar(max), nvarchar(max) i varbinary(max).

następnie mamy to, o czym wspomnieliśmy na początku, a są to typy danych zdefiniowane przez Użytkownika, które pozwalają nam tworzyć własne typy danych na podstawie wbudowanej listy powyżej.

ostatnią kategorią są zdefiniowane przez użytkownika typy danych common language runtime (CLR), które pozwalają nam tworzyć własne typy danych przy użyciu.NET Framework., Jest to nieco bardziej skomplikowane niż powyższe i wymaga umiejętności programistycznych, aby zbudować assembly, zarejestrować ten assembly wewnątrz SQL Server, stworzyć nowy typ danych SQL oparty na tym assembly i wtedy możemy zacząć używać nowo utworzonego typu danych w SQL Server.

rozważania dotyczące typów danych SQL

przejdźmy do następnej sekcji, która jest w zasadzie tylko teorią, ale zdecydowanie czymś, o czym powinieneś pomyśleć podczas przechowywania danych na stałe lub tymczasowo.,

Konwersja

jako programista baz danych, jedną z najczęstszych procedur podczas pisania kodu jest konwersja. Konwersja ma miejsce, gdy dane z obiektu są przenoszone, porównywane lub łączone z danymi z innego obiektu. Konwersje te mogą się zdarzyć automatycznie, co nazywamy konwersją ukrytą w SQL Server lub ręcznie, która jest znana jako konwersja Jawna, co w zasadzie oznacza pisanie kodu specjalnie po to, aby coś zrobić. Użyteczna zasada jest taka, że Jawna konwersja jest zawsze lepsza od niejawnej, ponieważ sprawia, że kod jest bardziej czytelny., Teraz, gdy mówimy o konwersjach, warto wspomnieć również o tym, co może nam pomóc w jawnej konwersji, takiej jak CAST i konwertuj Funkcje Używane do konwersji wyrażenia jednego typu danych SQL na inny.

GUID

GUID jest skrótem od globalnie unikalnego identyfikatora. Jest to sposób na zagwarantowanie wyjątkowości i jest to jeden z największych typów danych SQL. Jedynym minusem GUID jest rozmiar 16 bajtów. Dlatego unikaj indeksów na GUID tak bardzo, jak to możliwe.

NULL vs., Nie NULL

Jeśli trzymasz się domyślnych wartości SQL Server, może to prowadzić do pewnych problemów z integralnością danych. Zawsze należy próbować określić właściwość nullability podczas definiowania kolumn w tabelach. Wracając do podstaw, null oznacza Nieznany lub brakujący, co zasadniczo oznacza, że nie jest to 0 lub pusty łańcuch i nie możemy wykonać porównania null. Nie możemy powiedzieć null = null. Nie da rady. Istnieje właściwość o nazwie ANSI_NULLS, którą możemy ustawić i kontrolować to porównanie z wartościami null.,

rzadkie kolumny

ten typ kolumny jest tylko zwykłą kolumną w SQL Server z wyjątkiem właściwości, która jest ustawiona na on i mówi SQL Server, aby zoptymalizować tę kolumnę pod kątem null storage.

wytyczne dotyczące typu danych SQL

przede wszystkim Zawsze używaj odpowiedniego typu danych dla danego zadania. To jest o wiele większe niż większość ludzi myśli. Może mieć znaczący wpływ na wydajność, wydajność, pamięć masową i dalszy rozwój bazy danych.

jeśli weźmiemy dwa pierwsze, optymalizator zapytań wygeneruje plan wykonania w zależności od tego, jakie typy danych są używane., Bardzo prostym przykładem może być użycie typu danych bigint, gdzie możemy używać smallint – cóż, najprawdopodobniej po prostu spowalniamy zapytanie. Wybór odpowiedniego typu danych SQL ostatecznie spowoduje, że optymalizator zapytań będzie działał wydajniej.

dobrym pomysłem jest dostarczenie dokumentacji dla siebie i innych za pomocą bazy danych o typach danych wchodzących do obiektów. Jest to oczywiste, ale unikaj przestarzałych typów danych, zawsze sprawdzaj najnowszą dokumentację firmy Microsoft pod kątem wiadomości i aktualizacji., Jeśli istnieje niewielka szansa, że będziesz pracować z danymi nieanglojęzycznymi, Zawsze używaj typów danych Unicode. Ponadto, użyj typów danych sysname dla skryptów administracyjnych nad nvarchar.

przykłady typów danych SQL

przejdźmy do SSMS i zobaczmy, jak możemy pracować z niektórymi typami danych wymienionymi w poprzednich sekcjach. Przejdziemy przez konwersje, rzadkie kolumny i typy danych aliasów.

Konwersja

funkcje Cast, Convert i Parse konwertują wyrażenie jednego typu danych SQL na inne., Poniżej znajduje się przykładowe zapytanie, które może być użyte na przykładowej bazie danych „AdventureWorks” w tabeli „TransactionHistory”. Pobiera „ProductID” i „TransactionDate”, z których możemy użyć tej daty transakcji, aby zobaczyć, jak działa konwersja:

oto zestaw wyników różnych typów danych SQL:

użyliśmy funkcji Cast przeciwko TransactionDate, aby przekonwertować wartości do nvarchar na długość 30. Następnie użyliśmy konwersji, aby zrobić to samo, ale następnie określiliśmy również format 110, który daje nam określony styl daty., Na koniec użyliśmy Parse, który zasadniczo działa tak samo, ale możemy zastosować do niego kulturę.,spójrz na zestaw wyników i zobacz, co mamy:

  1. tutaj mamy datę i godzinę transakcji, która znajduje się w bazie danych (typ danych datetime)
  2. Oto, jak wygląda, gdy oddajemy ją jako reprezentację tekstową
  3. Konwersja robi to samo, ale w tym przypadku określamy, jak funkcja Convert przełoży wyrażenie (110 = mm).-DD-YYYY)
  4. parsowanie w tym przypadku, po prostu tłumaczy żądane dane za pomocą określonej kultury (en-US)

następnie, zobaczmy kilka dodatkowych rzeczy, które możemy zrobić z funkcją parse., Parse jest świetny z konwertowaniem ciągów NA daty i liczby całkowite. Na przykład, jeśli wykonamy instrukcję Select poniżej, pobierze ona ciąg znaków 100.000 i zamieni go w liczbę całkowitą:

1
select parse(’100.,000′ AS INT) jako StringToInt;

oto zestaw wyników:

teraz powiedzmy, że chcemy zrobić to samo ponownie, ale dla niektórych powód, liczba całkowita ma w sobie znak, że SQL Server nie może przekonwertować na liczbę całkowitą:

1
select parse(’10o.,000′ AS INT) jako StringToIntError;

oto komunikat o błędzie, który rzuca:

Msg 9819, poziom 16, Stan 1, linia 2
błąd konwertowania wartości łańcucha ’10o.000′ do typu danych int przy użyciu Kultury „.,

w takim przypadku możemy użyć Try_Parse zamiast zwykłego Parse, ponieważ jeśli spróbujemy tego samego z góry, zwróci to wartość null zamiast błędu:

1
wybierz try_parse („10o.,000′ AS INT) as StringToIntNull;

oto, jak to wygląda:

ta metoda może być używana jako identyfikator, jeśli coś wystąpi błąd czasu aka kodowanie obronne. Tries można również zastosować do pozostałych dwóch typów danych SQL.

Sparse columns

jak wspomniałem na początku, sparse columns reduce null space requirements., 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;

zauważ, że istnieje wiele wartości null w kolumnach ProductAssemblyID i EndDate:

dlatego możemy powiedzmy, że ci dwaj są dobrymi kandydatami do rzadkich kolumn., Tak więc, jednym ze sposobów na zmianę tej właściwości jest po prostu zmiana właściwości w Projektancie lub możemy to zrobić za pomocą kodu T-SQL od dołu:

1
2
3
4

Zmień produkcję tabeli.BillOfMaterials ALTER Column ProductAssemblyID ADD SPARSE;
GO
ALTER TABLE Production.,BillOfMaterials ALTER COLUMN EndDate ADD SPARSE;
GO

polecenia nie wypełniły się pomyślnie za pierwszym razem, więc musiałem stracić klastrowy indeks (linia 7) i wszystko poszło gładko:

jeśli wrócimy do object explorera, odświeżymy tabelę billofmaterials, widzimy, że te dwie kolumny są teraz oznaczone jako rzadkie kolumny:

ładnie, prawda. Jeszcze jedna fajna rzecz o rzadkich kolumnach nazywa się zestawami kolumn., Jest to przydatne w sytuacji, gdy mamy tabelę, która zawiera kilka kolumn specjalnego przeznaczenia, które są rzadko używane, jak w naszym przykładzie kolumny ProductAssemblyID i EndDate lub AddressLine2, Middleename, itp. Tak więc pomysł z zestawem kolumn jest taki, że SQL Server weźmie wszystkie te kolumny i da nam wygenerowaną kolumnę XML, która można zaktualizować. Może to prowadzić do zwiększenia wydajności aplikacji, ponieważ SQL Server może pracować z zestawem kolumn, a nie z każdą pojedynczą kolumną.,

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

tak więc, jeśli spróbujemy dodać zestaw kolumn, ale nasza tabela ma już rzadkie kolumny, będzie to błąd:

msg 1734, Level 16, State 1, Line 9
nie może utworzyć rzadkiego zestawu kolumn 'SPARSECOLUMNS' w tabeli 'billofmaterials', ponieważ tabela zawiera już jedną lub więcej rzadszych kolumn. Nie można dodać do tabeli zestawu rzadkich kolumn, jeśli tabela zawiera małą kolumnę.,

Jeśli kiedykolwiek natkniesz się na to, najprostszym obejściem jest cofnięcie rzadkich kolumn. Można to łatwo zrobić w Projektancie. Po prostu otwórz go z Object Explorer, wybierz kolumnę, której potrzebujesz, i we właściwościach kolumny zmień właściwość is Parse na No, jak pokazano poniżej:

teraz, jeśli wykonamy polecenie jeszcze raz, zakończy się sukcesem:

nie dodawaj najpierw rzadkich kolumn – dodaj najpierw zestawy kolumn, a następnie rzadkie kolumny. W ten sposób nie będziesz musiał tego robić w trudny sposób., Co jest naprawdę fajne w tym, nasze instrukcje DML, takie jak Select, Insert i Update mogą nadal działać w stary sposób, odwołując się do kolumn indywidualnie lub możemy to zrobić za pomocą zestawów kolumn.

typy danych SQL zdefiniowane przez użytkownika

zakończmy to tworząc niestandardowy typ danych. Zamierzamy utworzyć typ danych alias, który jest oparty na innym typie danych. Powiedzmy, że mamy potrzebę przechowywania adresów URL w naszej tabeli i chcemy utworzyć rzeczywisty typ danych URL., 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., Ustawiłem wartość max na 2048 z powodu tego wątku, który znalazłem w Internecie, który stwierdza, że należy zachować swoje adresy URL poniżej 2048 znaków:

możemy zobaczyć ten nowy typ danych SQL, jeśli skierujemy się nad Object Explorer, pod programowalność, typy, typy danych zdefiniowane przez użytkownika folder:

stąd możemy zacząć używać nowo utworzonego typu danych., 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., Zaczęliśmy od przeglądu, aby zapoznać się z niektórymi wbudowanymi typami danych. Następnie omówiliśmy kilka rzeczy do rozważenia podczas pracy z typami danych i konwersji za pomocą funkcji Cast, Convert i Parse. Wskoczyliśmy również do SSMS, gdzie pokazaliśmy, jak przekonwertować wyrażenie jednego typu danych na inny. Omówiliśmy, jak pracować z rzadkimi kolumnami, a następnie zobaczyliśmy, jak tworzyć własne niestandardowe typy danych.

mam nadzieję, że ten artykuł o typach danych SQL był dla Ciebie pouczający i dziękuję za przeczytanie go.,

  • Autor
  • Ostatnie posty
Bojan aka „boksi”, absolwent technologii IT skupionej na sieciach i technologii elektronicznej z Copenhagen School of design and Technology, jest analitykiem oprogramowania z doświadczeniem w zapewnianiu jakości, wsparciu oprogramowania, ewangelizacji produktów i zaangażowaniu użytkowników.,
napisał obszernie zarówno na SQL Shack i ApexSQL Solution Center, na tematy począwszy od technologii klienckich, takich jak rozdzielczość 4K i theming, obsługa błędów do strategii indeksowania i monitorowanie wydajności.
Bojan pracuje w ApexSQL w Nis, Serbia jako integralna część zespołu skupiającego się na projektowaniu, rozwijaniu i testowaniu nowej generacji narzędzi bazodanowych, w tym MySQL i SQL Server, oraz zarówno samodzielnych narzędzi i integracji z Visual Studio, SSMS i VSCode.,
Zobacz więcej o Bojan na LinkedIn
Zobacz wszystkie posty Bojan Petrovic

najnowsze posty Bojan Petrovic (Zobacz wszystkie)
  • Visual Studio Code for MySQL and MariaDB development – 13 sierpnia, 2020
  • wyjaśniono składnię aktualizacji SQL – 10 lipca 2020
  • Utwórz widok SQL: praca z indeksowanymi widokami w SQL Server – 24 marca 2020

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *