INSERT (SQL Graph)
適用於: SQL Server 2017 (14.x) 及更新版本 Azure SQL 資料庫 Azure SQL 受控執行個體
將一或多個資料列新增至 SQL Server 中的 node
或 edge
資料表。
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_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');