INSERT (граф SQL)
Область применения: SQL Server 2017 (14.x) и более поздних версий База данных SQL Azure Управляемый экземпляр SQL Azure
Добавляет одну или несколько строк в таблицу node
или edge
таблицу в SQL Server.
Соглашения о синтаксисе Transact-SQL
Синтаксис таблицы INSERT в узел
Синтаксис вставки в таблицу узлов совпадает с синтаксисом ставки в обычную таблицу.
[ 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
при вставке в край. Ошибка возвращается, если значение не указано или NULLs вставляется в эти столбцы.
Замечания
- Вставка в таблицу узлов аналогична вставке в любую реляционную таблицу. Значения столбца
$node_id
создаются автоматически. - При вставке строк в граничную таблицу необходимо указать значения и
$from_id
$to_id
столбцы. - Операция вставки с параметром BULK в таблицу узлов аналогична вставке в реляционную таблицу.
- Перед массовой вставкой в граничную таблицу необходимо импортировать таблицы узлов. Затем значения для
$from_id
и$to_id
можно извлечь из столбца$node_id
таблицы узлов и вставить в виде границ.
Разрешения
Требуется разрешение INSERT на целевую таблицу.
Разрешения INSERT назначаются по умолчанию членам предопределенной роли сервера sysadmin, предопределенных ролей базы данных db_owner и db_datawriter, а также владельцу таблицы. Члены ролей sysadmin, db_owner и db_securityadmin, а также владелец таблицы могут передавать разрешения другим пользователям.
Чтобы выполнить инструкцию INSERT с параметром BULK функции OPENROWSET, необходимо быть членом предопределенной роли сервера sysadmin или bulkadmin.
Примеры
А. Вставка в таблицу узлов
В следующем примере создается 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');