What I'm trying to do: read the logs and insert the necessary data into 3 different tables that get information from each other.
我要做的是:读取日志并将必要的数据插入到3个不同的表中,这3个表相互获取信息。
LOG_ITEM201303
is found on gamelogs db.Mail_Item_Table
, Mail_List_Table
, Mail_Message_Table
is found on game db.
在gamelogs db上可以找到LOG_ITEM201303。在游戏db上可以找到Mail_Item_Table、Mail_List_Table、Mail_Message_Table。
The Mail Tables are connected via the Indexes.
邮件表通过索引连接。
CHAR_KEY
, NAME
, ITEMNUM
are the values I need to use for my queries.
CHAR_KEY、NAME、ITEMNUM是我需要用于查询的值。
The query for me to get the data from the logs:
从日志中获取数据的查询:
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')
Sample result of logs query above(total actual results are in 600+):
上面日志查询的示例结果(实际结果总数为600+):
CHAR_KEY NAME ITEMNUM
-----------+----------------+-----------
28257 | clarkailey | 14438
894367 | Wolf | 15023
2869858 | HOPEINME | 14437
Now I need to automatically insert each row into this query:
现在我需要自动将每一行插入到这个查询中:
CHAR_KEY NAME ITEMNUM
-----------+----------------+-----------
2869858 | HOPEINME | 14437
(this query shows an example of the 3rd sample data above being inserted...
instead of making this query for each entry is there a way for this to done faster?)
(此查询显示了上面插入的第三个示例数据的示例……)是否有一种方法可以更快地完成这项任务,而不是对每个条目执行此查询?
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())
My question:
我的问题:
How to automate all this, that the query will read all the logs and insert the data row by row. Thank you very much.
如何自动化所有这些,查询将读取所有日志并按行插入数据行。非常感谢。
Can I use @variables for this?
我可以使用@variables吗?
1 个解决方案
#1
36
You can use the following syntax for inserts
对于插入,可以使用以下语法
INSERT INTO dbo.Destination (Col1, Col2, Col3)
SELECT Col1, Col2, Col3
FROM dbo.Source
If you had tables with the same columns or a result set that had the same columns as your destination, you don't have to specify columns in the INSERT.
如果您有具有相同列的表或具有与目的地相同列的结果集,则不必在INSERT中指定列。
INSERT INTO dbo.Destination
SELECT *
FROM dbo.Source
Both of these are predicated on your Destination table already being created. These are NOT the same as SELECT * INTO dbo.Destination FROM dbo.Source
这两个谓词都基于已经创建的目标表。这些与SELECT * INTO dbo不同。从dbo.Source目的地
#1
36
You can use the following syntax for inserts
对于插入,可以使用以下语法
INSERT INTO dbo.Destination (Col1, Col2, Col3)
SELECT Col1, Col2, Col3
FROM dbo.Source
If you had tables with the same columns or a result set that had the same columns as your destination, you don't have to specify columns in the INSERT.
如果您有具有相同列的表或具有与目的地相同列的结果集,则不必在INSERT中指定列。
INSERT INTO dbo.Destination
SELECT *
FROM dbo.Source
Both of these are predicated on your Destination table already being created. These are NOT the same as SELECT * INTO dbo.Destination FROM dbo.Source
这两个谓词都基于已经创建的目标表。这些与SELECT * INTO dbo不同。从dbo.Source目的地