2015-04-12 4 views
-1

Моя цель - отслеживать частоту просмотра записей.Команда SELECT и INSERT в том же заявлении sql

Например- Посетитель ищет книги. Его поиск соответствует 1200 книгам. Когда список результатов отправляется обратно посетителю, я хотел бы сохранить идентификатор этих 1200 книг в другой таблице. Чтобы я мог получить данные о том, как можно было бы искать время в книге.

Гипотетически SQL может быть что-то как-

SELECT BookId, BookName FROM Books(INSERT INTO SearchLogs(BookId) VALUES(BookId)) 

Я даже не знаю, является ли это возможно или нет. Я использую SQL Server 2008 R2.

Любая идея?

+0

Почему? вы можете сделать это в двух операциях в одной партии ... 'SELECT BookId, BookName FROM Book; INSERT INTO SearchLogs (BookId) VALUES (BookId) ' –

+0

Это можно сделать в одном выражении с предложением' output', хотя для доступа к другим столбцам [вам нужно будет использовать 'merge', а не' insert' ] (http://stackoverflow.com/q/5365629/73226) –

+0

Итак, вы хотите 'INSERT' некоторые' BookId 'в' SearchLogs' и **, затем ** увидеть 'BookId' и 'BookName' вы только что вставили? – nhgrif

ответ

1

Как о чем-то вроде этого:

INSERT INTO SearchLogs(BookId) 
SELECT BookId FROM Books 
--WHERE CLAUSE IF NEEDED 
+0

Я думаю, что количество элементов в 'select' и' insert' должно совпадать? вы можете попробовать этот «INSERT INTO SearchLogs (BookId) SELECT BookId FROM Books», чтобы увидеть, работает ли он? – renakre

+0

Ваше решение только вставляет записи в таблицу SearchLogs. но не возвращает никаких записей из таблицы Books. –

+0

Вы правы. Однако при таком подходе у нас есть ОЧЕНЬ эффективная вставка данных (мы не использовали циклы и вставляем сразу все данные: https://technet.microsoft.com/en-us/library/ms189872%28v=sql.105 % 29.aspx). Вы можете просто добавить инструкцию 'SELECT BookId, BookName FROM Books' после' INSERT', это не вызовет проблем с производительностью. – renakre

1

Я предполагаю, что у вас есть некоторые функции в вашем программном коде, который возвращает результат запроса на выборку.
Используйте оба запроса отдельно. Просто добавьте этот код функции, который выполняет запрос INSERT с идентификатором запроса SELECT в вашей таблице журналов.

Оба запроса могут работать под той же связи ...

Я думаю, что такого рода задачи является для Промишленое логического уровня.

Смежные вопросы