INSERT (SQL Graph)

S’applique à : SQL Server 2017 (14.x) et versions ultérieures Azure SQL DatabaseAzure SQL Managed Instance

Ajoute une ou plusieurs lignes à une table node ou edge dans SQL Server.

Conventions de la syntaxe Transact-SQL

Syntaxe de l’instruction INSERT en vue d’une insertion dans une table de nœuds

La syntaxe permettant d’effectuer une insertion dans une table de nœuds est la même que celle utilisée pour une table standard.

[ 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])

Arguments

Notes

Cet article décrit les arguments SQL Graph. Pour obtenir une liste complète et une description des arguments pris en charge dans l’instruction INSERT, consultez INSERT TABLE (Transact-SQL). Pour en savoir plus sur les instructions Transact-SQL standard, consultez INSERT TABLE (Transact-SQL).

INTO

Mot clé facultatif qui peut être utilisé entre INSERT et la table cible.

La clause search_condition_with_matchMATCH peut être utilisée dans une sous-requête à l’occasion d’une opération d’insertion dans une table de nœuds ou d’arêtes. Pour en savoir plus sur la syntaxe de l’instruction MATCH, consultez GRAPH MATCH (Transact-SQL).

Modèle de recherche graph_search_pattern fourni à la clause MATCH comme partie intégrante du prédicat de graphique.

Les utilisateurs edge_table_column_list doivent fournir des valeurs pour les colonnes $from_id et $to_id à l’occasion d’une insertion dans une table d’arêtes. Une erreur est retournée si aucune valeur n’est fournie ou que des valeurs NULL sont insérées dans ces colonnes.

Notes

  • Une insertion dans un nœud équivaut à une insertion dans une table relationnelle. Les valeurs de la colonne $node_id sont générées automatiquement.
  • À l’occasion d’une insertion de lignes dans une table d’arêtes, les utilisateurs doivent fournir des valeurs pour les colonnes $from_id et $to_id.
  • Une insertion en bloc (BULK) dans une table de nœuds s’effectue de la même façon que dans une table relationnelle.
  • Avant de procéder à une insertion en bloc dans une table d’arêtes, les tables de nœuds doivent être importées. Les valeurs pour $from_id et $to_id peuvent ensuite être extraites de la colonne $node_id de la table de nœuds, puis insérées comme arêtes.

Autorisations

L'autorisation INSERT est obligatoire sur la table cible.

Les autorisations INSERT sont accordées par défaut aux membres du rôle serveur fixe sysadmin, aux rôles de base de données fixes db_owner et db_datawriter, ainsi qu’au propriétaire de la table. Les membres des rôles sysadmin, db_owner et db_securityadmin et le propriétaire de la table peuvent transférer des autorisations à d’autres utilisateurs.

Pour exécuter INSERT avec l’option BULK de la fonction OPENROWSET, vous devez être membre du rôle serveur fixe sysadmin ou bulkadmin.

Exemples

R. Insertion dans une table de nœuds

L’exemple suivant crée une table de nœuds Person et y insère deux lignes.

-- 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. Insertion dans une table d’arêtes

L’exemple suivant crée une table d’arêtes nommée friend et y insère une arête.

-- 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');

Étapes suivantes