INSERT(SQL Graph)
적용 대상: SQL Server 2017(14.x) 이상 Azure SQL Database Azure SQL Managed Instance
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
제공해야 합니다. 값이 제공되지 않거나 NULL이 이러한 열에 삽입되면 오류가 반환됩니다.
설명
- 노드에 삽입은 관계형 테이블에 삽입과 동일합니다. 열의
$node_id
값이 자동으로 생성됩니다. - 에지 테이블에 행을 삽입하는 동안에는 값
$from_id
과$to_id
열을 제공해야 합니다. - 노드 테이블에 대한 BULK 삽입은 관계형 테이블과 동일합니다.
- 에지 테이블에 대량 삽입을 수행하기 전에 노드 테이블을 가져와야 합니다. 그런 다음,
$from_id
및$to_id
에 대한 값을 노드 테이블의$node_id
열에서 추출하여 에지로 삽입할 수 있습니다.
사용 권한
대상 테이블에 대해 INSERT 권한이 필요합니다.
sysadmin 고정 서버 역할, db_owner 및 db_datawriter 고정 데이터베이스 역할의 멤버 및 테이블 소유자에게는 기본적으로 INSERT 권한이 부여됩니다. 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');