20

私がやろうとしていること:ログを読み、必要なデータを3つの異なるテーブルに挿入して、相互に情報を取得します。

LOG_ITEM201303gamelogsdbにあります。
Mail_Item_Table、、はゲームデータベースにあります Mail_List_TableMail_Message_Table

メールテーブルはインデックスを介して接続されます。

CHAR_KEY、、はNAMEITEMNUMクエリに使用する必要のある値です。

ログからデータを取得するためのクエリ:

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を使用できますか?

4

1 に答える 1

38

挿入には次の構文を使用できます

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

宛先と同じ列を持つテーブルまたは同じ列を持つ結果セットがある場合は、INSERTで列を指定する必要はありません。

INSERT INTO dbo.Destination
SELECT *
FROM dbo.Source

これらは両方とも、すでに作成されているDestinationテーブルを前提としています。これらはと同じではありませんSELECT * INTO dbo.Destination FROM dbo.Source

于 2013-03-24T18:04:42.733 に答える