INSERT (SQL グラフ)

適用対象: SQL Server 2017 (14.x) 以降 Azure SQL DatabaseAzure SQL Managed Instance

node で、1 つまたは複数の行をedgeやSQL Serverに追加します。

Transact-SQL 構文表記規則

ノード テーブルへの INSERT 構文

ノード テーブルに挿入するための構文は、通常のテーブルの場合と同じです。

[ WITH <common_table_expression> [ ,...n ] ]  
INSERT   
{  
        [ TOP ( expression ) [ PERCENT ] ]   
        [ INTO ]   
        { <object> | rowset_function_limited   
          [ WITH ( <Table_Hint_Limited> [ ...n ] ) ]  
        }  
    {  
        [ (column_list) ] | [(<edge_table_column_list>)]  
        [ <OUTPUT Clause> ]  
        { VALUES ( { DEFAULT | NULL | expression } [ ,...n ] ) [ ,...n     ]   
        | derived_table   
        | execute_statement  
        | <dml_table_source>  
        | DEFAULT VALUES   
        }  
    }  
}  
[;]  
  
<object> ::=  
{   
    [ server_name . database_name . schema_name .   
      | database_name .[ schema_name ] .   
      | schema_name .   
    ]  
    node_table_name  | edge_table_name
}  
  
<dml_table_source> ::=  
    SELECT <select_list>  
    FROM ( <dml_statement_with_output_clause> )   
      [AS] table_alias [ ( column_alias [ ,...n ] ) ]  
    [ WHERE <on_or_where_search_condition> ]  
        [ OPTION ( <query_hint> [ ,...n ] ) ]  

<on_or_where_search_condition> ::=
    {  <search_condition_with_match> | <search_condition> }

<search_condition_with_match> ::=
    { <graph_predicate> | [ NOT ] <predicate> | ( <search_condition> ) }
    [ AND { <graph_predicate> | [ NOT ] <predicate> | ( <search_condition> ) } ]
    [ ,...n ]

<search_condition> ::=
    { [ NOT ] <predicate> | ( <search_condition> ) }
    [ { AND | OR } [ NOT ] { <predicate> | ( <search_condition> ) } ]
    [ ,...n ]

<graph_predicate> ::=
    MATCH( <graph_search_pattern> [ AND <graph_search_pattern> ] [ , ...n] )

<graph_search_pattern>::=
    <node_alias> { { <-( <edge_alias> )- | -( <edge_alias> )-> } <node_alias> }

<edge_table_column_list> ::=
    ($from_id, $to_id, [column_list])

引数

Note

この記事では、SQL グラフに関連する引数について説明します。 INSERT ステートメントでサポートされている引数の完全な一覧と説明については、INSERT TABLE (Transact-SQL) に関する記事を参照してください。 標準の Transact-SQL ステートメントについては、「INSERT TABLE (Transact-SQL)」を参照してください。

INTO

INSERT と対象のテーブルとの間で使用できるキーワードで、省略可能です。

search_condition_with_matchMATCH 句は、ノードまたはエッジ テーブルへの挿入中に、サブクエリで使用できます。 MATCH ステートメントの構文については、GRAPH MATCH (Transact-SQL) に関する記事を参照してください。

graph_search_pattern グラフ述語の一部として MATCH 句に指定される検索パターン。

edge_table_column_list エッジに挿入するときに、ユーザーが $from_id$to_id の値を指定する必要があります。 値が指定されていないか、null がこれらの列に挿入された場合、エラーが返されます。

解説

  • ノードへの挿入は、すべてのリレーショナル テーブルへの挿入と同じです。 $node_id 列の値が自動的に生成されます。
  • エッジ テーブルに行を挿入する際に、$from_id 列と $to_id 列の値を指定する必要があります。
  • ノード テーブルの一括挿入は、リレーショナル テーブルの一括挿入と同じです。
  • エッジ テーブルに一括挿入する前に、ノード テーブルをインポートする必要があります。 $from_id$to_id の値をノード テーブルの $node_id 列から抽出し、エッジとして挿入できます。

アクセス許可

対象のテーブルに対する INSERT 権限が必要です。

INSERT 権限は、既定では sysadmin 固定サーバー ロール、db_owner 固定データベース ロール、および db_datawriter 固定データベース ロールのメンバーと、テーブル所有者に与えられています。 sysadmindb_owner、および db_securityadmin ロールのメンバー、およびテーブル所有者は、他のユーザーに権限を譲渡できます。

OPENROWSET 関数の BULK オプションで INSERT を実行するには、sysadmin 固定サーバー ロールまたは bulkadmin 固定サーバー ロールのメンバーであることが必要です。

A. ノード テーブルへの挿入

次の例では、Person ノード テーブルを作成し、そのテーブルに 2 つの行を挿入しています。

-- Create person node table
CREATE TABLE dbo.Person (ID integer PRIMARY KEY, name varchar(50)) AS NODE;
 
-- Insert records for Alice and John
INSERT INTO dbo.Person VALUES (1, 'Alice');
INSERT INTO dbo.Person VALUES (2,'John');

B. エッジ テーブルへの挿入

次の例では、friend エッジ テーブルを作成し、テーブルにエッジを挿入しています。

-- Create friend edge table
CREATE TABLE dbo.friend (start_date DATE) AS EDGE;

-- Create a friend edge, that connect Alice and John
INSERT INTO dbo.friend VALUES ((SELECT $node_id FROM dbo.Person WHERE name = 'Alice'),
        (SELECT $node_id FROM dbo.Person WHERE name = 'John'), '9/15/2011');

次のステップ