INSERT(SQL 图形)

适用于: SQL Server 2017 (14.x) 及更高版本 Azure SQL 数据库Azure SQL 托管实例

node 中的 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])

参数

注意

本文介绍与 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 列的值。
  • 节点表的 BULK 插入与关系表的 BULK 插入相同。
  • 批量插入边缘表之前,必须导入节点表。 然后才可从节点表的 $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 节点表,并向该表插入两行。

-- 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');

后续步骤