Zusätzlich zu den vielen Datentypen, die in SQL Server verfügbar sind, haben Sie auch die Möglichkeit, Ihren eigenen Datentyp zu erstellen. Einige davon werden als „benutzerdefinierte Datentypen“ bezeichnet, während andere als „Alias-Datentypen“ bezeichnet werden.
Ein benutzerdefinierter Datentyp wird durch eine Klasse einer Assembly in der Common Language Runtime (CLR) von Microsoft.NET Framework implementiert.
Ein Alias-Datentyp basiert auf einem nativen Systemtyp von SQL Server. Mit anderen Worten, Sie verwenden einen vorhandenen Datentyp als Grundlage für Ihren Alias-Datentyp.
Allerdings habe ich gesehen, dass Microsoft den Begriff „benutzerdefinierter Datentyp-Alias“ verwendet, wenn es sich auf einen Alias-Datentyp bezieht. Ich habe auch gesehen, dass es einfach als „Datentyp-Alias“ bezeichnet wird.
In jedem Fall zeigt dieser Artikel, wie Sie mit Transact-SQL einen benutzerdefinierten Datentypalias erstellen.
Beispiel 1 – Erstellen Sie einen Alias-Datentyp
Um einen Alias-Datentyp zu erstellen, führen Sie CREATE TYPE
aus Anweisung für die Datenbank, dass Sie den Alias-Datentyp erstellen möchten.
Hier ist ein Codebeispiel, das einen benutzerdefinierten Datentyp-Alias basierend auf SQL Server varchar erstellt Datentyp:
USE Test;CREATE TYPE clientcode FROM varchar(8) NOT NULL;
Ergebnis:
Befehle erfolgreich abgeschlossen. Gesamtausführungszeit:00:00:00.028
In diesem Fall erstelle ich einen Alias-Datentyp namens clientcode in einer Datenbank namens Test .
Mein Alias basiert auf varchar(8) , was bedeutet, dass es sich um eine Zeichenfolge variabler Länge mit einer Länge von bis zu 8 Bytes handeln kann. Bei Single-Byte-Zeichensätzen (z. B. Latein) werden bis zu 8 Zeichen gespeichert. Bei Zeichensätzen mit Multibyte-Codierung kann die Anzahl der Zeichen jedoch geringer sein.
Beispiel 2 – Anzeigen des Alias-Datentyps
Sie können sys.types
verwenden um die Details Ihres Alias-Datentyps zu überprüfen:
SELECT * FROM sys.typesWHERE name ='clientcode';
Ergebnis:
Wir können sehen, dass is_user_defined ist Flag für diesen Datentyp ist 1 , was bedeutet, dass es sich um einen benutzerdefinierten Datentyp handelt.
In diesem Beispiel habe ich die Ergebnisse auf den
clientcode
eingegrenzt Datentyp. Sie können sys.types
verwenden um Informationen zu allen Datentypen in der Datenbank zurückzugeben. Weitere Informationen finden Sie unter Zurückgeben einer Liste von Datentypen in SQL Server.
Nachdem der Alias-Datentyp erstellt wurde, können wir fortfahren und ihn verwenden.
Beispiel 3 – Erstellen Sie eine Tabelle, die den Alias verwendet
In diesem Beispiel erstelle ich eine Tabelle, die meinen neu erstellten Datentyp-Alias in einer ihrer Spaltendefinitionen verwendet.
USE Test;CREATE TABLE Client( ClientCode clientcode PRIMARY KEY, FirstName varchar(50), LastName varchar(50));
Wir können einen kurzen Blick auf die Spalten in der Tabelle werfen:
SELECT c.name, c.system_type_id, c.user_type_id, c.max_length, c.is_nullableFROM sys.columns cINNER JOIN sys.tables tON t.object_id =c.object_idWHERE t.name ='Client';
Ergebnisse:
+------------+-------------+------------- ------------------------+---------------+| Name | system_type_id | user_type_id | max_länge | is_nullable ||-----------+------------------+--------------- -+----------------------+---------------|| Kundencode | 167 | 257 | 8 | 0 || Vorname | 167 | 167 | 50 | 1 || Nachname | 167 | 167 | 50 | 1 |+-----------+------------------+--------------- -+--------------+---------------+
Es gibt noch viele weitere Datenspalten, aber ich habe sie auf einige eingegrenzt, die für diesen Artikel relevant sind.
Beispiel 4 – Daten einfügen
Jetzt ist es an der Zeit, Daten in die Spalte einzufügen, die unseren benutzerdefinierten Datentyp-Alias verwendet.
INSERT INTO ClientVALUES ('aaa00001', 'Satoshi', 'Nakamoto');
Wählen Sie nun die Zeile:
ausSELECT * FROM Client;
Ergebnis:
+--------------+------------+------------+| Kundencode | Vorname | Nachname ||--------------+------------+------------|| aaa00001 | Satoshi | Nakamoto |+--------------+------------+------------+
So können wir sehen, dass unser Alias-Datentyp die Daten wie angegeben akzeptiert hat.
Aber es wäre kein richtiger Test, wenn wir nicht versuchten, es zu knacken.
Versuchen wir, einen Wert einzufügen, der nicht unserem Alias entspricht:
INSERT INTO ClientVALUES ('aaaa00002', 'Mikko', 'Linnamäki');
Ergebnis:
Msg 8152, Level 16, State 30, Zeile 1String oder Binärdaten werden abgeschnitten.
In diesem Fall habe ich versucht, einen Wert einzufügen, der 9 Bytes zum Speichern erfordern würde, aber der Alias akzeptiert nur Werte bis zu 8 Bytes, also hat er ihn abgelehnt.
Wenn ich eines der Zeichen entferne, funktioniert es einwandfrei:
INSERT INTO ClientVALUES ('aaa00002', 'Mikko', 'Linnamäki');SELECT * FROM Client;
Ergebnis:
+--------------+------------+------------+| Kundencode | Vorname | Nachname ||--------------+------------+------------|| aaa00001 | Satoshi | Nakamoto || aaa00002 | Michko | Linnamäki |+--------------+------------+------------+