Di SQL Server, Anda dapat menggunakan TYPE_ID()
berfungsi untuk mengembalikan ID suatu tipe data, berdasarkan namanya. Ini bisa berguna saat menanyakan tampilan sistem yang menyimpan ID tipe data tetapi bukan namanya. Biasanya lebih mudah untuk mengingat nama. Tidak mudah mengingat ID.
Anda dapat menggunakan TYPE_ID()
untuk tipe data sistem dan tipe data yang ditentukan pengguna.
Contoh 1 – Penggunaan Dasar
Berikut adalah contoh dasar untuk mendemonstrasikan cara kerjanya.
SELECT TYPE_ID('varchar') AS Result;
Hasil:
+----------+ | Result | |----------| | 167 | +----------+
Hasil ini memberi tahu kita bahwa varchar tipe data memiliki ID 167.
Contoh 2 – Contoh Basis Data
Berikut ini contoh penggunaan TYPE_ID()
dalam WHERE
klausa untuk memfilter hasil ke tipe data tertentu saja.
SELECT o.name AS [Object Name], c.name AS [Column Name], c.user_type_id AS [Type ID], TYPE_NAME(c.user_type_id) AS [Type Name] FROM sys.objects AS o JOIN sys.columns AS c ON o.object_id = c.object_id JOIN sys.types t ON c.user_type_id = t.user_type_id WHERE c.user_type_id = TYPE_ID('varchar');
Hasil:
+---------------+---------------+-----------+-------------+ | Object Name | Column Name | Type ID | Type Name | |---------------+---------------+-----------+-------------| | Individual | FirstName | 167 | varchar | | Individual | LastName | 167 | varchar | | Occupation | JobTitle | 167 | varchar | | Event | EventName | 167 | varchar | | Scoreboard | Player | 167 | varchar | | Team | TeamName | 167 | varchar | | Client | FirstName | 167 | varchar | | Client | LastName | 167 | varchar | | Colors | ColorName | 167 | varchar | +---------------+---------------+-----------+-------------+
Anda akan melihat bahwa saya juga menggunakan TYPE_NAME()
dalam contoh ini untuk mengembalikan nama berdasarkan ID-nya.
Contoh 3 – Jenis Buatan Pengguna
Anda juga dapat menggunakan TYPE_ID()
untuk tipe yang ditentukan pengguna. Berikut adalah contoh yang menyertakan alias tipe yang ditentukan pengguna dalam hasil.
SELECT o.name AS [Object Name], c.name AS [Column Name], c.user_type_id AS [Type ID], TYPE_NAME(c.user_type_id) AS [Type Name], CASE WHEN t.is_user_defined = 1 THEN 'Yes' ELSE 'No' END AS [User Defined?] FROM sys.objects AS o JOIN sys.columns AS c ON o.object_id = c.object_id JOIN sys.types t ON c.user_type_id = t.user_type_id WHERE c.user_type_id = TYPE_ID('varchar') OR c.user_type_id = TYPE_ID('clientcode');
Hasil:
+---------------+---------------+-----------+-------------+-----------------+ | Object Name | Column Name | Type ID | Type Name | User Defined? | |---------------+---------------+-----------+-------------+-----------------| | Individual | FirstName | 167 | varchar | No | | Individual | LastName | 167 | varchar | No | | Occupation | JobTitle | 167 | varchar | No | | Event | EventName | 167 | varchar | No | | Scoreboard | Player | 167 | varchar | No | | Team | TeamName | 167 | varchar | No | | Client | ClientCode | 257 | clientcode | Yes | | Client | FirstName | 167 | varchar | No | | Client | LastName | 167 | varchar | No | | Colors | ColorName | 167 | varchar | No | +---------------+---------------+-----------+-------------+-----------------+
Di sini jenis kode klien adalah alias jenis yang ditentukan pengguna, dan itu is_user_defined
bendera adalah 1
. Dalam hal ini saya menggunakan CASE
ekspresi untuk mengembalikan Yes
(dan untuk mengembalikan No
jika 0
).
Contoh 4 – Jenis Tidak Valid atau Izin Tidak Memadai
Jika Anda memberikan nama jenis yang tidak valid atau Anda tidak memiliki izin yang memadai untuk mereferensikan jenis tersebut, hasilnya adalah NULL.
SELECT TYPE_ID('oops') AS Result;
Hasil:
+----------+ | Result | |----------| | NULL | +----------+