INSERT(SQL 图形)
适用于:SQL Server 2017 (14.x) 及更高版本 Azure SQL 数据库 Azure SQL 托管实例
向 node
中的 edge
或 SQL Server 表格添加一行或多行。
INSERT Into 节点表语法
插入节点表的语法与插入常规表的语法相同。
[ 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用户必须在插入边缘时提供值$from_id
$to_id
。 如果未提供值或 NUL 插入到这些列中,则返回错误。
注解
- 插入节点表与插入任何关系表相同。
$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');