INSERT(SQL Graph)

적용 대상: SQL Server 2017(14.x) 이상 Azure SQL 데이터베이스Azure SQL Managed Instance

nodeedge 또는 SQL Server 테이블에 새 행을 하나 이상 추가합니다.

Transact-SQL 구문 표기 규칙

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 사용자는 에지를 삽입하는 동안 및 $to_id 에 대한 $from_id 값을 제공해야 합니다. 값이 제공되지 않거나 NULL이 이러한 열에 삽입되면 오류가 반환됩니다.

설명

  • 노드에 삽입은 관계형 테이블에 삽입과 동일합니다. 열의 $node_id 값이 자동으로 생성됩니다.
  • 에지 테이블에 행을 삽입하는 동안 및 $to_id 열에 대한 $from_id 값을 제공해야 합니다.
  • 노드 테이블에 대한 BULK 삽입은 관계형 테이블과 동일합니다.
  • 에지 테이블에 대량 삽입을 수행하기 전에 노드 테이블을 가져와야 합니다. 그런 다음, $from_id$to_id에 대한 값을 노드 테이블의 $node_id 열에서 추출하여 에지로 삽입할 수 있습니다.

사용 권한

대상 테이블에 대해 INSERT 권한이 필요합니다.

sysadmin 고정 서버 역할, db_ownerdb_datawriter 고정 데이터베이스 역할의 멤버 및 테이블 소유자에게는 기본적으로 INSERT 권한이 부여됩니다. sysadmin, db_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');

다음 단계