INSERT (SQL グラフ)
適用対象: SQL Server 2017 (14.x) 以降 Azure SQL Database Azure SQL Managed Instance
node
で、1 つまたは複数の行をedge
やSQL Serverに追加します。
ノード テーブルへの 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 固定データベース ロールのメンバーと、テーブル所有者に与えられています。 sysadmin、db_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');