Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как можно сделать вложенный запрос?  [new]
sc2r2bey
Member

Откуда:
Сообщений: 207
Есть две связанные таблицы
Как правильно сделать запрос
INSERT INTO table1
(field1, field2, field3)
VALUES
(value1, value2, value3)
INSERT INTO table2
(field1, field2)
VALUES
(ID созданный в предыдущем запросу, value2)
13 авг 18, 16:21    [21640786]     Ответить | Цитировать Сообщить модератору
 Re: Как можно сделать вложенный запрос?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
sc2r2bey,

OUTPUT
https://docs.microsoft.com/en-us/sql/t-sql/queries/output-clause-transact-sql?view=sql-server-2017
13 авг 18, 16:25    [21640791]     Ответить | Цитировать Сообщить модератору
 Re: Как можно сделать вложенный запрос?  [new]
sc2r2bey
Member

Откуда:
Сообщений: 207
когда во второй таблице есть внешний ключ
FOREIGN KEY (user_id)  REFERENCES user (id) ON DELETE CASCADE

то при выполнении запроса, вылетает ошибка:
автор
Целевая таблица "table2" предложения OUTPUT INTO не может находиться ни с одной стороны связи (первичный ключ, внешний ключ). Обнаружено ссылочное ограничение "FK__table2__user_id__7C510D32".


а когда ключ убираю то все корректно добавляется в обе таблицы

запрос:
INSERT INTO user (
		username, 
		email
)
OUTPUT INSERTED.id, 'text'
INTO table2(
user_id,
message
)
VALUES (
		'user',
		'user@example.org',
)
13 авг 18, 17:23    [21640883]     Ответить | Цитировать Сообщить модератору
 Re: Как можно сделать вложенный запрос?  [new]
Владимир Затуливетер
Member

Откуда:
Сообщений: 427
черзе scope_identity сделайте

insert into user ( username, email )
values ( 'user', 'user@example.org' )

into table2 ( user_id, message )
values ( scope_identity(), 'text' )
13 авг 18, 17:26    [21640888]     Ответить | Цитировать Сообщить модератору
 Re: Как можно сделать вложенный запрос?  [new]
sc2r2bey
Member

Откуда:
Сообщений: 207
пишет:
автор
Неправильный синтаксис около ключевого слова "INTO".
13 авг 18, 17:32    [21640898]     Ответить | Цитировать Сообщить модератору
 Re: Как можно сделать вложенный запрос?  [new]
sc2r2bey
Member

Откуда:
Сообщений: 207
упс INSERT пропустил, а так работает
13 авг 18, 17:34    [21640901]     Ответить | Цитировать Сообщить модератору
 Re: Как можно сделать вложенный запрос?  [new]
iap
Member

Откуда: Москва
Сообщений: 46954
sc2r2bey
когда во второй таблице есть внешний ключ
Сделайте табличную переменную и OUTPUT в неё.
В документации есть же пример.

Однако, надо знать, есть ли у таблицы триггеры, какие они и что делают.
13 авг 18, 18:37    [21640995]     Ответить | Цитировать Сообщить модератору
 Re: Как можно сделать вложенный запрос?  [new]
sc2r2bey
Member

Откуда:
Сообщений: 207
тригеров нет
13 авг 18, 19:11    [21641028]     Ответить | Цитировать Сообщить модератору
 Re: Как можно сделать вложенный запрос?  [new]
sc2r2bey
Member

Откуда:
Сообщений: 207
это этом пример?
DECLARE @MyTableVar table( NewScrapReasonID smallint,  
                           Name varchar(50),  
                           ModifiedDate datetime);  
INSERT Production.ScrapReason  
    OUTPUT INSERTED.ScrapReasonID, INSERTED.Name, INSERTED.ModifiedDate  
        INTO @MyTableVar  
VALUES (N'Operator error', GETDATE());  

--Display the result set of the table variable.  
SELECT NewScrapReasonID, Name, ModifiedDate FROM @MyTableVar;  
--Display the result set of the table.  
SELECT ScrapReasonID, Name, ModifiedDate   
FROM Production.ScrapReason; 
13 авг 18, 19:16    [21641034]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить