Вставка Microsoft SQL Server из выбранного запроса
Что я пытаюсь сделать: прочитайте журналы и вставьте необходимые данные в 3 разные таблицы, которые получают информацию друг от друга.
LOG_ITEM201303
находится на gamelogs db.
Mail_Item_Table
, Mail_List_Table
, Mail_Message_Table
находится в игре db.
Почтовые таблицы подключаются через индексы.
CHAR_KEY
, NAME
, ITEMNUM
- значения, которые мне нужно использовать для моих запросов.
Запрос для получения данных из журналов:
SELECT CHAR_KEY, NAME, ITEMNUM
FROM LOG_ITEM201303
where
(
ITEMNUM = 14317
OR ITEMNUM = 14318
OR ITEMNUM = 15478
OR ITEMNUM = 15479
OR ITEMNUM = 14301
OR ITEMNUM = 14302
OR ITEMNUM = 15476
OR ITEMNUM = 15477
OR ITEMNUM = 15018
OR ITEMNUM = 15019
OR ITEMNUM = 15020
OR ITEMNUM = 15021
OR ITEMNUM = 15022
OR ITEMNUM = 15023
OR ITEMNUM = 15024
OR ITEMNUM = 15025
OR ITEMNUM = 14437
OR ITEMNUM = 14438
OR ITEMNUM = 15656
OR ITEMNUM = 15657
OR ITEMNUM = 15658
OR ITEMNUM = 15659
OR ITEMNUM = 15660
OR ITEMNUM = 15661
OR ITEMNUM = 15662
OR ITEMNUM = 15663
) AND (KIND = 133) AND (Convert(varchar, OCCUR_TIME,111) < '2013/03/22')
Пример результата запроса журналов выше (итоговые фактические результаты находятся в 600 +):
CHAR_KEY NAME ITEMNUM
-----------+----------------+-----------
28257 | clarkailey | 14438
894367 | Wolf | 15023
2869858 | HOPEINME | 14437
Теперь мне нужно автоматически вставить каждую строку в этот запрос:
CHAR_KEY NAME ITEMNUM
-----------+----------------+-----------
2869858 | HOPEINME | 14437
(этот запрос показывает пример 3-го образца данных выше, который вставлен...
вместо того, чтобы делать этот запрос для каждой записи, есть ли способ сделать это быстрее?)
INSERT INTO Mail_Item_Table
(ItemNumber, ItemInfo, ReceiveDate)
VALUES
(14437, --this is the ITEMNUM
(SELECT CONVERT(BINARY(16), REVERSE(CONVERT(BINARY(16), 14437)))), NULL)
INSERT INTO Mail_Message_Table
(Message)
VALUES
('Automated Message from the ADMIN.')
INSERT INTO Mail_List_Table
(ReceiverCharKey, MailListIndex, MailItemIndex, MailMessageIndex, Sender, Receiver, SendDate)
VALUES
(2869858, --this is the CHAR_KEY
(SELECT TOP 1 MailListIndex+1 as last_entry
FROM Mail_List_Table
WHERE sender = 'SENDER'
ORDER BY MailListIndex DESC),
(SELECT TOP 1 MailItemIndex AS last_entry
FROM Mail_Item_Table
ORDER BY MailItemIndex DESC),
(SELECT TOP 1 MailMessageIndex AS last_entry
FROM Mail_Message_Table
ORDER BY MailMessageIndex DESC),
'SENDER',
'HOPEINME', --this is the NAME
getdate())
Мой вопрос:
Как автоматизировать все это, чтобы запрос считывал все журналы и вставлял данные по строкам.
Большое вам спасибо.
Могу ли я использовать @variables для этого?
Ответы
Ответ 1
Вы можете использовать следующий синтаксис для вставок
INSERT INTO dbo.Destination (Col1, Col2, Col3)
SELECT Col1, Col2, Col3
FROM dbo.Source
Если у вас были таблицы с одинаковыми столбцами или набор результатов, который имел те же столбцы, что и ваш пункт назначения, вам не нужно указывать столбцы в INSERT.
INSERT INTO dbo.Destination
SELECT *
FROM dbo.Source
Оба из них основаны на уже созданной таблице назначения. Это НЕ, как SELECT * INTO dbo.Destination FROM dbo.Source