INSERT (gráfico SQL)

Se aplica a: SQL Server 2017 (14.x) y versiones posteriores Azure SQL DatabaseAzure SQL Managed Instance

Agrega una o varias filas a una tabla node o edge en SQL Server.

Convenciones de sintaxis de Transact-SQL

Sintaxis INSERT en tabla de nodo

La sintaxis para insertar en una tabla de nodo es la misma que para una tabla normal.

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

Argumentos

Nota

En este artículo se describen los argumentos relacionados con un gráfico SQL. Para obtener una lista completa y una descripción de los argumentos admitidos en una instrucción INSERT, consulte INSERT TABLE (Transact-SQL). Para obtener instrucciones Transact-SQL estándar, vea INSERT TABLE (Transact-SQL).

INTO

Es una palabra clave opcional que se puede usar entre INSERT y la tabla de destino.

La cláusula search_condition_with_matchMATCH se puede usar en una subconsulta mientras se realiza una operación de inserción en una tabla de nodo o perimetral. Para obtener la sintaxis de instrucción MATCH, consulte GRAPH MATCH (Transact-SQL).

graph_search_pattern Patrón de búsqueda proporcionado a la cláusula MATCH como parte del predicado del gráfico.

edge_table_column_list Los usuarios deben proporcionar valores en $from_id y $to_id al realizar una operación de inserción en una tabla perimetral. Se devolverá un error si no se proporciona un valor o se insertan valores NULL en esas columnas.

Observaciones

  • Insertar en un nodo es lo mismo que insertar en cualquier tabla relacional. Los valores de la columna $node_id se generan automáticamente.
  • Al insertar filas en una tabla perimetral, los usuarios deben proporcionar valores para las columnas $from_id y $to_id.
  • La inserción con BULK en una tabla de nodo es igual que para una tabla relacional.
  • Antes de insertar con BULK en una tabla perimetral, las tablas de nodo se deben importar. Así, los valores de $from_id y $to_id se podrán extraer de la columna $node_id de la tabla de nodo y se insertarán en la tabla perimetral.

Permisos

El permiso INSERT es obligatorio en la tabla de destino.

Los permisos INSERT corresponden de forma predeterminada a los miembros del rol fijo de servidor sysadmin, de los roles fijos de base de datos db_owner y db_datawriter y al propietario de la tabla. Los miembros de los roles sysadmin, db_owner y db_securityadmin y el propietario de la tabla pueden transferir permisos a otros usuarios.

Para ejecutar INSERT con la opción BULK de la función OPENROWSET, debe ser miembro de los roles fijos de servidor sysadmin o bulkadmin.

Ejemplos

A. Insertar en una tabla de nodo

En el ejemplo siguiente se crea una tabla de nodo Person y se insertan dos filas en ella.

-- 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. Insertar en una tabla perimetral

En el siguiente ejemplo se crea una tabla perimetral friend y se inserta un borde en ella.

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

Pasos siguientes