2013-03-24 17 views
16

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

LOG_ITEM201303はgamelogs dbにあります。
Mail_Item_Table,Mail_List_Table,Mail_Message_Tableがゲームdbに見つかりました。

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

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 

は今、私がする必要が

(このクエリは、上記の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を使用できますか?

+0

select..into clause help? http://msdn.microsoft.com/en-us/library/ms190750(v=sql.90).aspx – Tim

+0

私はそれを調べています。ありがとう。 [編集]私は 'SELECT INTO'を利用できないようです。 – madziikoy

+0

基本的には、LOGITEM201303 DBからデータを読み込み、言及した3つのテーブルにデータを挿入するのですか?そして、(LOGITEM DBからの)各行のデータは、表示されているようにこれらの3つのテーブルに入りますか? – GayanSanjeewa

答えて

33

は、あなたが同じ列またはデスティネーションと同じ列を持っていた結果セットを持つテーブルを持っていた場合、あなたが列を指定する必要はありません挿入

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

ため、次の構文を使用することができますインサート。

INSERT INTO dbo.Destination 
SELECT * 
FROM dbo.Source 

これらの両方は、すでに作成されている宛先テーブルに基づいています。これらはであり、と同じSELECT * INTO dbo.Destination FROM dbo.Source