共用方式為


INSERT (SQL Graph)

適用於: SQL Server 2017 (14.x) 及更新版本 Azure SQL 資料庫 Azure SQL 受控執行個體

將一或多個資料列新增至 SQL Server 中的 nodeedge 資料表。

Transact-SQL 語法慣例

INSERT Into node table syntax

插入節點資料表的語法與一般資料表相同。

[ 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 和目標資料表之間使用它。

MATCH search_condition_with_match 子句可在插入節點或邊緣數據表時,用於子查詢中。 如需MATCH語句語法,請參閱 GRAPH MATCH (Transact-SQL)。

graph_search_pattern提供給 MATCH 子句作為圖形述詞一部分的搜尋模式。

edge_table_column_list用戶必須在插入邊緣時提供和 $to_id 的值$from_id。 如果未提供值,或將 NUL 插入這些數據行,則會傳回錯誤。

備註

  • 插入至節點是與插入至任何關聯式資料表相同。 $node_id數據行的值會自動產生。
  • 當您將資料列插入邊緣資料表時,您必須提供 和 $to_id 資料行的值$from_id
  • 節點資料表的大量插入仍然與關聯式資料表相同。
  • 在大量插入邊緣資料表之前,必須先匯入節點資料表。 然後可以從節點資料表的 $from_id 資料行擷取 $to_id$node_id 的值,然後插入為邊緣。

權限

需要目標資料表的 INSERT 權限。

INSERT 權限預設會授與 sysadmin 固定伺服器角色、db_ownerdb_datawriter 固定資料庫角色的成員,以及資料表擁有者。 sysadmindb_ownerdb_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');

下一步