Cara membuat tipe data yang ditentukan pengguna di mysql

CREATE DOMAIN memungkinkan Anda membuat alias untuk tipe data bawaan dan menentukan rentang, batasan DEFAULT, NOT NULL, dan CHECK opsional

CREATE DOMAIN addr VARCHAR(90) NOT NULL DEFAULT 'N/A';   CREATE DOMAIN idx INT CHECK (VALUE > 100 AND VALUE < 999);

Untuk detail dan contoh lebih lanjut, lihat MEMBUAT DOMAIN

Anda dapat menggunakan CREATE DOMAIN dan CREATE TYPE untuk membuat tipe pencacahan yang hanya dapat menerima nilai dari daftar yang ditentukan

CREATE DOMAIN color VARCHAR(10) CHECK (VALUE IN ('red', 'green', 'blue'));   CREATE TYPE color2 AS ENUM ('red', 'green', 'blue');_

Perhatikan bahwa nilai peka terhadap huruf besar-kecil

Saat CREATE TYPE digunakan, pengurutan dilakukan sesuai urutan nilai yang tercantum dalam pernyataan CREATE TYPE, bukan berdasarkan nilai sebenarnya

Ganti UDT skalar dengan tipe dasar. Tulis ulang prosedur tersimpan yang menggunakan parameter input tipe tabel untuk menggunakan string dengan CSV, XML, atau JSON, atau untuk memproses baris demi baris. Untuk informasi selengkapnya, lihat Prosedur Tersimpan

Penggunaan SQL Server

Tipe yang ditentukan pengguna SQL Server menyediakan mekanisme untuk mengenkapsulasi tipe data kustom dan untuk menambahkan batasan NULL

SQL Server juga mendukung tipe yang ditentukan pengguna dengan nilai tabel, yang dapat Anda gunakan untuk meneruskan sekumpulan nilai ke prosedur tersimpan

Jenis yang ditentukan pengguna juga dapat dikaitkan dengan rakitan kode CLR. Dimulai dengan SQL Server 2014, tipe yang dioptimalkan memori mendukung tabel dan kode yang dioptimalkan memori

Jika kode Anda menggunakan aturan khusus yang terikat pada tipe data, Microsoft menyarankan untuk menghentikan penggunaan fitur yang sudah tidak digunakan lagi ini

Semua tipe yang ditentukan pengguna didasarkan pada tipe data sistem yang ada. Mereka memungkinkan pengembang untuk menggunakan kembali definisi tersebut, membuat kode dan skema lebih mudah dibaca

Sintaksis

Sintaks yang disederhanakan untuk pernyataan CREATE TABLE UserLocations (UserID INT NOT NULL PRIMARY KEY, ZipCode ZipCode);_7

CREATE TYPE { FROM [ NULL | NOT NULL ] | AS TABLE ()}

Examples

User-defined types

Create a ZipCodeScalar user-defined type.

CREATE TYPE ZipCode FROM CHAR(5) NOT NULL

Gunakan CREATE TABLE UserLocations (UserID INT NOT NULL PRIMARY KEY, ZipCode ZipCode);_8 dalam sebuah tabel

CREATE TABLE UserLocations (UserID INT NOT NULL PRIMARY KEY, ZipCode ZipCode);INSERT INTO [UserLocations] ([UserID],[ZipCode]) VALUES (1, '94324'); INSERT INTO [UserLocations] ([UserID],[ZipCode]) VALUES (2, NULL);

Untuk contoh sebelumnya, pesan kesalahan berikut muncul. Ini menunjukkan bahwa nilai NULL untuk CREATE TABLE UserLocations (UserID INT NOT NULL PRIMARY KEY, ZipCode ZipCode);9 tidak diperbolehkan

Msg 515, Level 16, State 2, Line 78 Cannot insert the value NULL into column 'ZipCode', table 'tempdb.dbo.UserLocations'; column doesn't allow nulls. INSERT fails. The statement has been terminated._

Jenis bernilai tabel

Contoh berikut menunjukkan cara membuat dan menggunakan tipe nilai tabel untuk meneruskan sekumpulan nilai ke prosedur tersimpan

Buat tabel INSERT INTO [UserLocations] ([UserID],[ZipCode]) VALUES (1, '94324'); INSERT INTO [UserLocations] ([UserID],[ZipCode]) VALUES (2, NULL);_0

CREATE TABLE OrderItems ( OrderID INT NOT NULL, Item VARCHAR(20) NOT NULL, Quantity SMALLINT NOT NULL, PRIMARY KEY(OrderID, Item) );

Buat tabel tipe nilai untuk tabel INSERT INTO [UserLocations] ([UserID],[ZipCode]) VALUES (1, '94324'); INSERT INTO [UserLocations] ([UserID],[ZipCode]) VALUES (2, NULL);0

CREATE TYPE OrderItems AS TABLE ( OrderID INT NOT NULL, Item VARCHAR(20) NOT NULL, Quantity SMALLINT NOT NULL, PRIMARY KEY(OrderID, Item) );

Buat prosedur INSERT INTO [UserLocations] ([UserID],[ZipCode]) VALUES (1, '94324'); INSERT INTO [UserLocations] ([UserID],[ZipCode]) VALUES (2, NULL);_2. Perhatikan bahwa seluruh rangkaian baris dari parameter bernilai tabel ditangani dengan satu pernyataan

CREATE PROCEDURE InsertOrderItems @OrderItems AS OrderItems READONLY AS BEGIN INSERT INTO OrderItems(OrderID, Item, Quantity) SELECT OrderID, Item, Quantity FROM @OrderItems; END

Instansiasi tipe INSERT INTO [UserLocations] ([UserID],[ZipCode]) VALUES (1, '94324'); INSERT INTO [UserLocations] ([UserID],[ZipCode]) VALUES (2, NULL);0, masukkan nilai, dan teruskan ke prosedur tersimpan

DECLARE @OrderItems AS OrderItems;INSERT INTO @OrderItems ([OrderID], [Item], [Quantity]) VALUES (1, 'M8 Bolt', 100), (1, 'M8 Nut', 100), (1, M8 Washer, 200); EXECUTE [InsertOrderItems] @OrderItems = @OrderItems; (3 rows affected)

Pilih semua baris dari tabel INSERT INTO [UserLocations] ([UserID],[ZipCode]) VALUES (1, '94324'); INSERT INTO [UserLocations] ([UserID],[ZipCode]) VALUES (2, NULL);_0

SELECT * FROM OrderItems; OrderID Item Quantity 1 M8 Bolt 100 1 M8 Nut 100 1 M8 Washer 200

Untuk informasi selengkapnya, lihat CREATE TYPE (Transact-SQL) dalam dokumentasi SQL Server

Penggunaan MySQL

Amazon Aurora Edisi yang Kompatibel dengan MySQL (Aurora MySQL) 5. 7 tidak mendukung tipe yang ditentukan pengguna dan parameter bernilai tabel yang ditentukan pengguna

Dokumentasi saat ini tidak menunjukkan bahwa fitur ini akan didukung di Aurora MySQL versi 8

Pertimbangan Migrasi

Untuk tipe skalar yang ditentukan pengguna, ganti nama tipe dengan tipe dasar dan batasan NULL opsional

Untuk tipe yang ditentukan pengguna bernilai tabel yang digunakan sebagai parameter prosedur tersimpan, solusinya lebih rumit

Solusi umum termasuk menggunakan tabel sementara untuk menyimpan data atau meneruskan parameter string besar yang berisi data dalam CSV, XML, JSON (atau format nyaman lainnya) dan kemudian menulis kode untuk mengurai nilai-nilai ini dalam prosedur tersimpan. Alternatifnya, jika logika tidak memerlukan akses ke seluruh rangkaian perubahan, dan untuk kumpulan data kecil, lebih mudah untuk memanggil prosedur tersimpan dalam satu lingkaran dan meneruskan kolom sebagai parameter standar, baris demi baris

Mesin yang dioptimalkan untuk memori belum didukung di Aurora MySQL. Anda harus mengonversi tabel yang dioptimalkan memori ke tabel berbasis disk

Contoh

Mengganti tipe yang ditentukan pengguna

Ganti INSERT INTO [UserLocations] ([UserID],[ZipCode]) VALUES (1, '94324'); INSERT INTO [UserLocations] ([UserID],[ZipCode]) VALUES (2, NULL);_5 tipe yang ditentukan pengguna dengan tipe dasar

CREATE TABLE UserLocations (UserID INT NOT NULL PRIMARY KEY, ZipCode ZipCode);0

Mengganti parameter stored procedure bernilai tabel

Langkah-langkah berikut menjelaskan cara mengganti parameter bernilai tabel dengan tabel sumber dan kursor INSERT INTO [UserLocations] ([UserID],[ZipCode]) VALUES (1, '94324'); INSERT INTO [UserLocations] ([UserID],[ZipCode]) VALUES (2, NULL);6

Buat tabel INSERT INTO [UserLocations] ([UserID],[ZipCode]) VALUES (1, '94324'); INSERT INTO [UserLocations] ([UserID],[ZipCode]) VALUES (2, NULL);_0

CREATE TABLE OrderItems ( OrderID INT NOT NULL, Item VARCHAR(20) NOT NULL, Quantity SMALLINT NOT NULL, PRIMARY KEY(OrderID, Item) );

Buat dan isi INSERT INTO [UserLocations] ([UserID],[ZipCode]) VALUES (1, '94324'); INSERT INTO [UserLocations] ([UserID],[ZipCode]) VALUES (2, NULL);_8

CREATE TABLE UserLocations (UserID INT NOT NULL PRIMARY KEY, ZipCode ZipCode);2CREATE TABLE UserLocations (UserID INT NOT NULL PRIMARY KEY, ZipCode ZipCode);3

Buat prosedur untuk mengulang melalui INSERT INTO [UserLocations] ([UserID],[ZipCode]) VALUES (1, '94324'); INSERT INTO [UserLocations] ([UserID],[ZipCode]) VALUES (2, NULL);_8 dan menyisipkan baris

Ada perbedaan sintaksis dari T-SQL untuk deklarasi dan penggunaan Msg 515, Level 16, State 2, Line 78 Cannot insert the value NULL into column 'ZipCode', table 'tempdb.dbo.UserLocations'; column doesn't allow nulls. INSERT fails. The statement has been terminated.0 dan Msg 515, Level 16, State 2, Line 78 Cannot insert the value NULL into column 'ZipCode', table 'tempdb.dbo.UserLocations'; column doesn't allow nulls. INSERT fails. The statement has been terminated.1. Untuk informasi selengkapnya, lihat Prosedur Tersimpan dan Kursor

CREATE TABLE UserLocations (UserID INT NOT NULL PRIMARY KEY, ZipCode ZipCode);_4

Panggil prosedur tersimpan

CREATE TABLE UserLocations (UserID INT NOT NULL PRIMARY KEY, ZipCode ZipCode);5

Pilih semua baris dari tabel INSERT INTO [UserLocations] ([UserID],[ZipCode]) VALUES (1, '94324'); INSERT INTO [UserLocations] ([UserID],[ZipCode]) VALUES (2, NULL);_0

CREATE TABLE UserLocations (UserID INT NOT NULL PRIMARY KEY, ZipCode ZipCode);6

Ringkasan

SQL Server Aurora MySQL Comments

Parameter bernilai tabel

Tidak didukung

Gunakan tabel sementara, atau parameter string CSV, XML, JSON dan parsing datanya. Alternatifnya, tulis ulang stored procedure untuk menerima data satu baris pada satu waktu dan memproses data dalam satu lingkaran

Bagaimana cara membuat pengguna

Untuk membuat tipe data yang ditentukan pengguna. Di Object Explorer, perluas Database, perluas database, perluas Programmability, perluas Jenis, klik kanan Jenis Data Buatan Pengguna, lalu klik Jenis Data Buatan Pengguna Baru.

Cara membuat pengguna

Anda dapat menentukan tipe tabel MySQL di kolom opsi tabel . Bidang ini dapat ditemukan di tab "umum" pada dialog Entitas. Opsi tabel akan disertakan di akhir pernyataan Buat. Anda dapat mengisi kolom ini misalnya dengan "TYPE = MYISAM".

Apa penggunanya

Variabel pengguna dapat diberi nilai dari sekumpulan tipe data terbatas. integer, desimal, floating-point, string biner atau non-biner, atau nilai NULL . Penetapan nilai desimal dan real tidak mempertahankan presisi atau skala nilai.

Bagaimana cara membuat UDT di SQL Server?

Ikuti langkah-langkah ini untuk membuat dan menerapkan UDT menggunakan Visual Studio. .
Buat proyek Database baru di simpul bahasa Visual Basic atau Visual C#
Tambahkan referensi ke database SQL Server yang akan berisi UDT
Tambahkan kelas Jenis yang Ditentukan Pengguna
Tulis kode untuk mengimplementasikan UDT
Dari menu Build, pilih Deploy

Postingan terbaru

LIHAT SEMUA