2013-03-24 113 views
16

我在做什么:读取日志并将必要的数据插入到3个不同的表中,以获取彼此的信息。从选择查询中插入Microsoft SQL Server

LOG_ITEM201303在gamelogs db上找到。
Mail_Item_TableMail_List_TableMail_Message_Table在游戏数据库中找到。

邮件表通过索引连接。

CHAR_KEYNAME,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这个吗?

+0

select..into子句的帮助吗? http://msdn.microsoft.com/en-us/library/ms190750(v=sql.90).aspx – Tim

+0

我正在调查它。谢谢。看起来像我不能使用'SELECT INTO'。 – madziikoy

+0

基本上你想要做的是从LOGITEM201303 DB读取数据,并将数据插入到你提到的3个表中,对吧?并且每行(来自LOGITEM DB)中的数据将显示在这三个表中? – GayanSanjeewa

回答

33

您可以使用插入

INSERT INTO dbo.Destination (Col1, Col2, Col3) 
SELECT Col1, Col2, Col3 
FROM dbo.Source 

以下语法如果您有相同的列或一个结果集,有相同的列的目标表,你不必指定列插。

INSERT INTO dbo.Destination 
SELECT * 
FROM dbo.Source 

这两个都是基于已经创建的目标表上的。这些是不是相同SELECT * INTO dbo.Destination FROM dbo.Source