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_Table
、Mail_List_Table
、Mail_Message_Table
可在游戏数据库中找到。
邮件表通过索引连接。
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
(此查询显示了上面插入的第三个示例数据的示例... 有没有一种方法可以更快地完成此查询,而不是对每个条目进行此查询?)
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