Di SQL Server, Anda dapat menggunakan PARSENAME()
fungsi untuk mengembalikan bagian dari nama objek.
Misalnya, Anda dapat menggunakannya untuk mengembalikan bagian skema (atau bagian lain mana pun) dari empat nama bagian seperti server.schema.db.object
.
Sintaks
Sintaksnya seperti ini:
PARSENAME ( 'object_name' , object_piece )
Dimana object_name
adalah nama objek (memenuhi syarat opsional) dan object_piece
adalah bagian yang ingin dikembalikan.
object_piece
argumen harus berupa int antara 1 dan 4. Nilai menentukan bagian mana dari nama objek yang akan dikembalikan. Nilai-nilai ini sesuai dengan bagian objek sebagai berikut:
Contoh 1 – Penggunaan Dasar
Berikut ini contoh untuk didemonstrasikan.
SELECT PARSENAME('Homer.dbo.Music.Artists', 4) SEBAGAI Hasil;
Hasil:
+----------+| Hasil ||----------|| Homer |+----------+
Dalam hal ini saya mengembalikan nama server dari nama objek empat bagian yang terdiri dari nama server, skema, database, dan tabel.
Contoh 2 – Kembalikan Semua Bagian
Begini tampilannya jika saya mengembalikan semua bagian secara terpisah.
DECLARE @object_name char(23) ='Homer.dbo.Music.Artists';SELECT PARSENAME(@object_name, 4) AS [Server], PARSENAME(@object_name, 3) AS [Schema], PARSENAME(@object_name , 2) SEBAGAI [Database], PARSENAME(@object_name, 1) SEBAGAI [Objek];
Hasil:
+----------+----------+------------+----------+ | Server | Skema | Basis Data | Objek ||----------+----------+------------+----------|| Homer | dbo | Musik | Artis |+----------+----------+------------+----------+Contoh 3 – SQL Server Tidak Memeriksa Nama
Penting untuk diketahui bahwa
PARSENAME()
tidak menunjukkan apakah suatu objek dengan nama yang ditentukan ada. Itu hanya mengembalikan bagian yang ditentukan dari nama objek yang diberikan.Oleh karena itu, Anda dapat meneruskan nilai apa pun ke fungsi tersebut, asalkan itu nama sistem valid yang valid .
DECLARE @object_name char(28) ='completely.bogus.object.name';SELECT PARSENAME(@object_name, 4) AS [Server], PARSENAME(@object_name, 3) AS [Schema], PARSENAME(@object_name , 2) SEBAGAI [Database], PARSENAME(@object_name, 1) SEBAGAI [Objek];Hasil:
+-------------+----------+------------+--------- -+| Server | Skema | Basis Data | Objek ||-------------+----------+------------+---------- || sepenuhnya | palsu | objek | nama |+------------+----------+------------+---------- +Contoh 4 – Nama Objek Tiga Bagian
Inilah yang terjadi jika saya memberikan nama tiga bagian.
DECLARE @object_name char(17) ='dbo.Music.Artists';SELECT PARSENAME(@object_name, 4) AS [Server], PARSENAME(@object_name, 3) AS [Schema], PARSENAME(@object_name, 2 ) SEBAGAI [Database], PARSENAME(@object_name, 1) SEBAGAI [Objek];Hasil:
+----------+----------+------------+----------+ | Server | Skema | Basis Data | Objek ||----------+----------+------------+----------|| NULL | dbo | Musik | Artis |+----------+----------+------------+----------+Contoh 5 – Nama Objek Dua Bagian
Inilah yang terjadi jika saya memberikan nama dua bagian.
DECLARE @object_name char(13) ='Music.Artists';SELECT PARSENAME(@object_name, 4) AS [Server], PARSENAME(@object_name, 3) AS [Schema], PARSENAME(@object_name, 2) AS [Database], PARSENAME(@object_name, 1) SEBAGAI [Objek];Hasil:
+----------+----------+------------+----------+ | Server | Skema | Basis Data | Objek ||----------+----------+------------+----------|| NULL | NULL | Musik | Artis |+----------+----------+------------+----------+Contoh 6 – Nama Objek Satu Bagian
Dan, sekonyol kelihatannya, nama satu bagian.
DECLARE @object_name char(7) ='Artists';SELECT PARSENAME(@object_name, 4) AS [Server], PARSENAME(@object_name, 3) AS [Schema], PARSENAME(@object_name, 2) AS [Database ], PARSENAME(@object_name, 1) SEBAGAI [Objek];Hasil:
+----------+----------+------------+----------+ | Server | Skema | Basis Data | Objek ||----------+----------+------------+----------|| NULL | NULL | NULL | Artis |+----------+----------+------------+----------+Contoh 7 – Nama Objek Lima Bagian
Inilah yang terjadi jika Anda memberikan nama objek dengan lebih dari empat bagian.
DECLARE @object_name char(23) ='Ups.Homer.dbo.Music.Artists';SELECT PARSENAME(@object_name, 4) AS [Server], PARSENAME(@object_name, 3) AS [Schema], PARSENAME( @object_name, 2) SEBAGAI [Database], PARSENAME(@object_name, 1) SEBAGAI [Objek];Hasil:
+----------+----------+------------+----------+ | Server | Skema | Basis Data | Objek ||----------+----------+------------+----------|| NULL | NULL | NULL | NULL |+----------+----------+------------+----------+Contoh 8 – Kegunaan Lain
Mengingat Anda dapat memberikan nama objek yang sepenuhnya palsu,
PARSENAME()
bisa menjadi peretasan yang berguna untuk memisahkan data lain yang dibatasi, seperti alamat IP4.DECLARE @object_name char(15) ='172.217.167.110';SELECT PARSENAME(@object_name, 4) AS [4], PARSENAME(@object_name, 3) AS [3], PARSENAME(@object_name, 2) AS [2], PARSENAME(@object_name, 1) AS [1];Hasil:
+-----+-----+-----+-----+| 4 | 3 | 2 | 1 ||-----+-----+-----+-----|| 172 | 217 | 167 | 110 |+-----+-----+-----+-----+Namun, jika Anda benar-benar perlu melakukannya, pertimbangkan untuk menggunakan metode lain, seperti
STRING_SPLIT()
.Contoh 9 – Koma dan Pembatas Lainnya
Diberikan
PARSENAME()
dimaksudkan untuk digunakan dengan nama objek, Anda tidak dapat menggunakan koma sebagai pembatas dan mengharapkannya berfungsi sama.Inilah yang terjadi jika saya mencoba melakukannya.
DECLARE @object_name char(23) ='Homer,dbo,Music,Artists';SELECT PARSENAME(@object_name, 4) AS [Server], PARSENAME(@object_name, 3) AS [Schema], PARSENAME(@object_name , 2) SEBAGAI [Database], PARSENAME(@object_name, 1) SEBAGAI [Objek];Hasil:
+----------+----------+------------+----------- --------------+| Server | Skema | Basis Data | Objek ||----------+----------+------------+------------ -------------|| NULL | NULL | NULL | Homer,dbo,Musik,Artis |+----------+----------+------------+------ -------------------+Anda harus mengganti koma dengan titik jika ingin melakukannya, atau menggunakan metode lain, seperti
STRING_SPLIT()
.