Microsoft SQL Server 从选择查询插入

Posted

技术标签:

【中文标题】Microsoft SQL Server 从选择查询插入【英文标题】:Microsoft SQL Server insert from select query 【发布时间】:2013-03-14 01:39:53 【问题描述】:

我正在尝试做的事情:读取日志并将必要的数据插入到相互获取信息的 3 个不同的表中。

LOG_ITEM201303 可在游戏日志数据库中找到。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 吗?

【问题讨论】:

select..into 子句帮助? msdn.microsoft.com/en-us/library/ms190750(v=sql.90).aspx 我正在调查。谢谢。 edit 好像我不能使用SELECT INTO 基本上你想要做的是从LOGITEM201303 DB中读取数据并将数据插入你提到的3个表中,对吧?并且每一行中的数据(来自 LOGITEM DB)将进入这三个表中显示? 【参考方案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

相同

【讨论】:

以上是关于Microsoft SQL Server 从选择查询插入的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 到 Microsoft SQL Server 派生表语法

为啥SQL数据库不能用SQL Server身份登录 提示用户sa登录失败。(Microsoft SQL server,错误18456)

为啥SQL数据库不能用SQL Server身份登录 提示用户sa登录失败。(Microsoft SQL server,错误18456)

text 从命令行打开Microsoft SQL Server Management Studio

如何在Microsoft SQL Server 2000里创建数据库

是否可以在 Microsoft SQL Server 上为 SQL 查询设置超时?