Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak utworzyć alias typu danych zdefiniowanego przez użytkownika w SQL Server przy użyciu T-SQL

Oprócz wielu typów danych dostępnych w SQL Server masz również możliwość stworzenia własnego typu danych. Niektóre z nich są określane jako „typy danych zdefiniowane przez użytkownika”, podczas gdy inne są określane jako „typy danych aliasów”.

typ danych zdefiniowany przez użytkownika jest implementowany przez klasę zestawu w środowisku uruchomieniowym języka wspólnego (CLR) Microsoft.NET Framework.

typ danych aliasu jest oparty na natywnym typie systemu SQL Server. Innymi słowy, używasz istniejącego typu danych jako podstawy typu danych aliasu.

Powiedziawszy to, widziałem, jak Microsoft używa terminu „alias typu danych zdefiniowanego przez użytkownika” w odniesieniu do typu danych aliasu. Widziałem również, że jest to po prostu „alias typu danych”.

Tak czy inaczej, w tym artykule pokazano, jak utworzyć alias typu danych zdefiniowanego przez użytkownika przy użyciu języka Transact-SQL.

Przykład 1 – Tworzenie aliasu typu danych

Aby utworzyć typ danych aliasu, uruchom CREATE TYPE oświadczenie względem bazy danych, dla której chcesz utworzyć alias typu danych.

Oto przykład kodu, który tworzy alias typu danych zdefiniowany przez użytkownika na podstawie varchar programu SQL Server typ danych:

USE Test;

CREATE TYPE clientcode  
FROM varchar(8) NOT NULL;

Wynik:

Commands completed successfully.
Total execution time: 00:00:00.028

W tym przypadku tworzę aliasowy typ danych o nazwie kod klienta w bazie danych o nazwie Test .

Mój alias jest oparty na varchar(8) , co oznacza, że ​​może to być ciąg znaków o zmiennej długości do 8 bajtów. W przypadku zestawów znaków kodowania jednobajtowego (takich jak łaciński), będzie to przechowywać do 8 znaków. Jednak w przypadku zestawów znaków kodowania wielobajtowego liczba znaków może być mniejsza.

Przykład 2 – Wyświetl typ danych aliasu

Możesz użyć sys.types aby sprawdzić szczegóły typu danych aliasu:

SELECT * FROM sys.types
WHERE name = 'clientcode';

Wynik:

name              | clientcode
system_type_id    | 167
user_type_id      | 257
schema_id         | 1
principal_id      | NULL
max_length        | 8
precision         | 0
scale             | 0
collation_name    | SQL_Latin1_General_CP1_CI_AS
is_nullable       | 0
is_user_defined   | 1
is_assembly_type  | 0
default_object_id | 0
rule_object_id    | 0
is_table_type     | 0

Widzimy, że is_user_defined flaga dla tego typu danych to 1 , co oznacza, że ​​jest to typ danych zdefiniowany przez użytkownika.

W tym przykładzie zawęziłem wyniki tylko do kodu klienta typ danych. Możesz użyć sys.types zwrócić informacje o wszystkich typach danych w bazie danych. Zobacz Jak zwrócić listę typów danych w SQL Server, aby uzyskać więcej informacji.

Teraz, gdy typ danych aliasu został utworzony, możemy go używać.

Przykład 3 – Utwórz tabelę używającą aliasu

W tym przykładzie tworzę tabelę, która używa mojego nowo utworzonego aliasu typu danych w jednej z jej definicji kolumn.

USE Test;

CREATE TABLE Client
(
    ClientCode clientcode PRIMARY KEY,
    FirstName varchar(50),
    LastName varchar(50)
);

Możemy rzucić okiem na kolumny w tabeli:

SELECT 
  c.name,  
  c.system_type_id,
  c.user_type_id,
  c.max_length,
  c.is_nullable
FROM sys.columns c
INNER JOIN sys.tables t
ON t.object_id = c.object_id
WHERE t.name = 'Client';

Wyniki:

+------------+------------------+----------------+--------------+---------------+
| name       | system_type_id   | user_type_id   | max_length   | is_nullable   |
|------------+------------------+----------------+--------------+---------------|
| ClientCode | 167              | 257            | 8            | 0             |
| FirstName  | 167              | 167            | 50           | 1             |
| LastName   | 167              | 167            | 50           | 1             |
+------------+------------------+----------------+--------------+---------------+

Jest o wiele więcej kolumn danych, ale zawęziłem je do tylko tych, które są istotne dla tego artykułu.

Przykład 4 – Wstaw dane

Teraz nadszedł czas, aby wstawić dane do kolumny, która korzysta z naszego zdefiniowanego przez użytkownika aliasu typu danych.

INSERT INTO Client
VALUES ('aaa00001', 'Satoshi', 'Nakamoto');

A teraz wybierz wiersz:

SELECT * FROM Client;

Wynik:

+--------------+-------------+------------+
| ClientCode   | FirstName   | LastName   |
|--------------+-------------+------------|
| aaa00001     | Satoshi     | Nakamoto   |
+--------------+-------------+------------+

Widzimy więc, że nasz typ danych aliasu zaakceptował dane zgodnie ze specyfikacją.

Ale nie byłby to właściwy test, gdyby nie próba jego złamania.

Spróbujmy wstawić wartość, która nie pasuje do naszego aliasu:

INSERT INTO Client
VALUES ('aaaa00002', 'Mikko', 'Linnamäki');

Wynik:

Msg 8152, Level 16, State 30, Line 1
String or binary data would be truncated.

W tym przypadku próbowałem wstawić wartość, która wymagałaby przechowywania 9 bajtów, ale alias akceptuje tylko wartości do 8 bajtów, więc go odrzucił.

Jeśli usunę jeden ze znaków, działa dobrze:

INSERT INTO Client
VALUES ('aaa00002', 'Mikko', 'Linnamäki');

SELECT * FROM Client;

Wynik:

+--------------+-------------+------------+
| ClientCode   | FirstName   | LastName   |
|--------------+-------------+------------|
| aaa00001     | Satoshi     | Nakamoto   |
| aaa00002     | Mikko       | Linnamäki  |
+--------------+-------------+------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zwróć parametry procedury składowanej lub funkcji zdefiniowanej przez użytkownika w programie SQL Server (przykłady T-SQL)

  2. order by newid() - jak to działa?

  3. Przechowywanie danych UTF-16/Unicode w SQL Server

  4. Jak używać instrukcji GO w programie SQL Server do wstawiania rekordów w kolumnie tożsamości — samouczek SQL Server / T-SQL, część 42

  5. Standardowe ciągi formatu liczbowego obsługiwane przez FORMAT() w SQL Server