Selain banyak tipe data yang tersedia di SQL Server, Anda juga memiliki opsi untuk membuat tipe data Anda sendiri. Beberapa di antaranya disebut sebagai "tipe data yang ditentukan pengguna", sementara yang lain disebut sebagai "tipe data alias".
Tipe data yang ditentukan pengguna diimplementasikan melalui kelas perakitan di Microsoft.NET Framework common language runtime (CLR).
Tipe data alias didasarkan pada tipe sistem asli SQL Server. Dengan kata lain, Anda menggunakan tipe data yang ada sebagai dasar tipe data alias Anda.
Karena itu, saya telah melihat Microsoft menggunakan istilah "alias tipe data yang ditentukan pengguna" ketika merujuk ke tipe data alias. Saya juga melihatnya disebut hanya sebagai "alias tipe data".
Either way, artikel ini menunjukkan cara membuat alias tipe data yang ditentukan pengguna menggunakan Transact-SQL.
Contoh 1 – Membuat Tipe Data Alias
Untuk membuat tipe data alias, jalankan CREATE TYPE
pernyataan terhadap database yang ingin Anda buat tipe data alias.
Berikut adalah contoh kode yang membuat alias tipe data yang ditentukan pengguna berdasarkan varchar SQL Server tipe data:
USE Test; CREATE TYPE clientcode FROM varchar(8) NOT NULL;
Hasil:
Commands completed successfully. Total execution time: 00:00:00.028
Dalam hal ini, saya membuat tipe data alias bernama kode klien dalam database bernama Uji .
Alias saya didasarkan pada varchar(8) , yang berarti dapat berupa string dengan panjang variabel hingga 8 byte. Untuk set karakter encoding byte tunggal (seperti Latin), ini akan menyimpan hingga 8 karakter. Namun, untuk kumpulan karakter penyandian multi-byte, jumlah karakter mungkin lebih sedikit.
Contoh 2 – Melihat Tipe Data Alias
Anda dapat menggunakan sys.types
untuk memeriksa detail tipe data alias Anda:
SELECT * FROM sys.types WHERE name = 'clientcode';
Hasil:
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
Kita dapat melihat bahwa is_user_defined tanda untuk tipe data ini adalah 1 , artinya ini adalah tipe data yang ditentukan pengguna.
Dalam contoh ini saya mempersempit hasilnya menjadi
clientcode
tipe data. Anda dapat menggunakan sys.types
untuk mengembalikan informasi tentang semua tipe data dalam database. Lihat Cara Mengembalikan Daftar Tipe Data di SQL Server untuk informasi selengkapnya.
Sekarang setelah tipe data alias telah dibuat, kita dapat melanjutkan dan menggunakannya.
Contoh 3 – Membuat Tabel yang Menggunakan Alias
Dalam contoh ini saya membuat tabel yang menggunakan alias tipe data yang baru saya buat di salah satu definisi kolomnya.
USE Test; CREATE TABLE Client ( ClientCode clientcode PRIMARY KEY, FirstName varchar(50), LastName varchar(50) );
Kita dapat melihat sekilas kolom dalam tabel:
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';
Hasil:
+------------+------------------+----------------+--------------+---------------+ | 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 | +------------+------------------+----------------+--------------+---------------+
Ada banyak lagi kolom data, tetapi saya telah mempersempitnya menjadi hanya beberapa yang relevan dengan artikel ini.
Contoh 4 – Sisipkan Data
Sekarang saatnya memasukkan data ke dalam kolom yang menggunakan alias tipe data yang ditentukan pengguna.
INSERT INTO Client VALUES ('aaa00001', 'Satoshi', 'Nakamoto');
Dan sekarang pilih barisnya:
SELECT * FROM Client;
Hasil:
+--------------+-------------+------------+ | ClientCode | FirstName | LastName | |--------------+-------------+------------| | aaa00001 | Satoshi | Nakamoto | +--------------+-------------+------------+
Jadi kita bisa melihat bahwa tipe data alias kita telah menerima data seperti yang ditentukan.
Tapi itu tidak akan menjadi ujian yang layak kecuali kita mencoba memecahkannya.
Mari kita coba memasukkan nilai yang tidak sesuai dengan alias kita:
INSERT INTO Client VALUES ('aaaa00002', 'Mikko', 'Linnamäki');
Hasil:
Msg 8152, Level 16, State 30, Line 1 String or binary data would be truncated.
Dalam hal ini saya mencoba memasukkan nilai yang membutuhkan 9 byte untuk disimpan, tetapi alias hanya menerima nilai hingga 8 byte, jadi ditolak.
Jika saya menghapus salah satu karakter, itu berfungsi dengan baik:
INSERT INTO Client VALUES ('aaa00002', 'Mikko', 'Linnamäki'); SELECT * FROM Client;
Hasil:
+--------------+-------------+------------+ | ClientCode | FirstName | LastName | |--------------+-------------+------------| | aaa00001 | Satoshi | Nakamoto | | aaa00002 | Mikko | Linnamäki | +--------------+-------------+------------+