SQL Serverでは、PARSENAME()
を使用できます。 オブジェクト名の一部を返す関数。
たとえば、これを使用して、server.schema.db.object
などの4つの部分の名前のスキーマ部分(またはその他の部分)を返すことができます。 。
構文
構文は次のようになります:
PARSENAME ( 'object_name' , object_piece )
object_name
の場所 (オプションで修飾された)オブジェクト名とobject_piece
です。 返品したい部分です。
object_piece
引数はintである必要があります 1から4の間。値は、オブジェクト名のどの部分を返すかを決定します。これらの値は、次のようにオブジェクト部分に対応します。
値 | オブジェクトパーツ |
---|---|
1 | オブジェクト名 |
2 | スキーマ名 |
3 | データベース名 |
4 | サーバー名 |
例1-基本的な使用法
実例を示します。
SELECT PARSENAME('Homer.dbo.Music.Artists', 4) AS Result;
結果:
+----------+ | Result | |----------| | Homer | +----------+
この場合、サーバー、スキーマ、データベース、およびテーブル名で構成される4つの部分からなるオブジェクト名からサーバー名を返しました。
例2–すべての部品を返品する
すべての部品を別々に返品すると、次のようになります。
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) AS [Database], PARSENAME(@object_name, 1) AS [Object];
結果:
+----------+----------+------------+----------+ | Server | Schema | Database | Object | |----------+----------+------------+----------| | Homer | dbo | Music | Artists | +----------+----------+------------+----------+
例3–SQLServerが名前をチェックしない
PARSENAME()
であることを知っておくことが重要です 指定された名前のオブジェクトが存在するかどうかを示しません。指定されたオブジェクト名から指定された部分を返すだけです。
したがって、有効な sysname である限り、関数に任意の値を渡すことができます。 。
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) AS [Database], PARSENAME(@object_name, 1) AS [Object];
結果:
+------------+----------+------------+----------+ | Server | Schema | Database | Object | |------------+----------+------------+----------| | completely | bogus | object | name | +------------+----------+------------+----------+
例4–3部構成のオブジェクト名
3部構成の名前を渡すとどうなりますか。
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) AS [Database], PARSENAME(@object_name, 1) AS [Object];
結果:
+----------+----------+------------+----------+ | Server | Schema | Database | Object | |----------+----------+------------+----------| | NULL | dbo | Music | Artists | +----------+----------+------------+----------+
例5–2部構成のオブジェクト名
2部構成の名前を渡すとどうなりますか。
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) AS [Object];
結果:
+----------+----------+------------+----------+ | Server | Schema | Database | Object | |----------+----------+------------+----------| | NULL | NULL | Music | Artists | +----------+----------+------------+----------+
例6–1つの部分からなるオブジェクト名
そして、一見ばかげているように見えるかもしれませんが、一部の名前です。
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) AS [Object];
結果:
+----------+----------+------------+----------+ | Server | Schema | Database | Object | |----------+----------+------------+----------| | NULL | NULL | NULL | Artists | +----------+----------+------------+----------+
例7–5つの部分からなるオブジェクト名
オブジェクト名に4つ以上の部分を指定すると、次のようになります。
DECLARE @object_name char(23) = 'Oops.Homer.dbo.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) AS [Object];
結果:
+----------+----------+------------+----------+ | Server | Schema | Database | Object | |----------+----------+------------+----------| | NULL | NULL | NULL | NULL | +----------+----------+------------+----------+
例8–その他の使用法
完全に偽のオブジェクト名を指定できる場合、PARSENAME()
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];
結果:
+-----+-----+-----+-----+ | 4 | 3 | 2 | 1 | |-----+-----+-----+-----| | 172 | 217 | 167 | 110 | +-----+-----+-----+-----+
ただし、本当にこれを行う必要がある場合は、STRING_SPLIT()
などの別のメソッドの使用を検討してください。 。
例9–カンマとその他の区切り文字
与えられたPARSENAME()
オブジェクト名で使用することを目的としているため、区切り文字としてカンマを使用して、同じように機能することを期待することはできません。
これを行おうとするとどうなりますか。
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) AS [Database], PARSENAME(@object_name, 1) AS [Object];
結果:
+----------+----------+------------+-------------------------+ | Server | Schema | Database | Object | |----------+----------+------------+-------------------------| | NULL | NULL | NULL | Homer,dbo,Music,Artists | +----------+----------+------------+-------------------------+
必要に応じて、カンマをドットに置き換えるか、STRING_SPLIT()
などの別のメソッドを使用する必要があります。 。