首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Microsoft SQL Server从select查询插入

Microsoft SQL Server从select查询插入
EN

Stack Overflow用户
提问于 2013-03-24 23:14:36
回答 1查看 43.6K关注 0票数 20

我想做的是:读取日志并将必要的数据插入到3个不同的表中,这些表从彼此获取信息。

LOG_ITEM201303可以在gamelogs数据库中找到。

在游戏数据库中可以找到Mail_Item_TableMail_List_TableMail_Message_Table

邮件表通过索引连接。

CHAR_KEYNAMEITEMNUM是我的查询需要使用的值。

我从日志中获取数据的查询:

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

(此查询显示了上面插入的第三个样本数据的示例...

是否有一种方法可以更快地完成此操作,而不是对每个条目进行此查询?)

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来做这件事吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-25 02:04:43

您可以使用以下语法进行插入

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

票数 38
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15600154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档