sql >> データベース >  >> RDS >> Sqlserver

PARSENAME()を使用して、SQLServerのオブジェクト名の一部を返します

    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()などの別のメソッドを使用する必要があります。 。


    1. 更新コマンドでのSQLServerエラー-現在のコマンドで重大なエラーが発生しました

    2. イミディエイトウィンドウの高速でダーティなForループ

    3. Rでパスワードを暗号化-RODBCを使用してOracleDBに接続します

    4. OracleRACとシーケンス