Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Microsoft SQL Server insert from select query

Tags:

What I'm trying to do: read the logs and insert the necessary data into 3 different tables that get information from each other.

LOG_ITEM201303 is found on gamelogs db.
Mail_Item_Table, Mail_List_Table, Mail_Message_Table is found on game db.

The Mail Tables are connected via the Indexes.

CHAR_KEY, NAME, ITEMNUM are the values I need to use for my queries.

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+):

 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?

like image 664
madziikoy Avatar asked Mar 24 '13 15:03

madziikoy


People also ask

Can we use select statement in insert?

You can use a select-statement within an INSERT statement to insert zero, one, or more rows into a table from the result table of the select-statement. The select-statement embedded in the INSERT statement is no different from the select-statement you use to retrieve data.

What is insert into select in SQL?

The INSERT INTO SELECT statement copies data from one table and inserts it into another table. The INSERT INTO SELECT statement requires that the data types in source and target tables match. Note: The existing records in the target table are unaffected.


1 Answers

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 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

like image 103
Vinnie Avatar answered Sep 28 '22 19:09

Vinnie