2013-03-24 17 views
16

Was ich versuche zu tun: Lesen Sie die Protokolle und fügen Sie die erforderlichen Daten in 3 verschiedene Tabellen, die Informationen voneinander erhalten.Microsoft SQL Server einfügen von Select-Abfrage

LOG_ITEM201303 wird auf gamelogs db gefunden.
Mail_Item_Table, Mail_List_Table, Mail_Message_Table ist im Spiel db gefunden.

Die Mail-Tabellen sind über die Indizes verbunden.

CHAR_KEY, NAME, ITEMNUM sind die Werte, die ich für meine Abfragen verwenden muss.

Die Abfrage für mich, die Daten aus den Protokollen zu erhalten:

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

Beispielergebnis von Protokollen Abfrage oben (insgesamt die tatsächlichen Ergebnisse sind in 600+):

CHAR_KEY  NAME   ITEMNUM 
-----------+----------------+----------- 
28257  | clarkailey | 14438 
894367  | Wolf   | 15023 
2869858 | HOPEINME  | 14437 

Jetzt muss ich fügt automatisch jede Zeile in diese Abfrage ein:

CHAR_KEY  NAME   ITEMNUM 
-----------+----------------+----------- 
2869858 | HOPEINME  | 14437 

(Diese Abfrage zeigt ein Beispiel für die oben genannten dritten Beispieldaten ted ...
stattdessen für jeden Eintrag diese Abfrage zu machen ist es eine Möglichkeit, schneller erledigt für diese)

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

Meine Frage:

Wie all dies zu automatisieren, dass die Abfrage lesen alle Protokolle und fügen Sie die Daten Zeile für Zeile. Vielen Dank.


Kann ich @variables dafür verwenden?

+0

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

+0

Ich untersuche es. Vielen Dank. [Bearbeiten] Seem ist wie ich kann nicht SELECT INTO verwenden. – madziikoy

+0

Im Grunde, was Sie tun möchten, ist das Lesen von Daten aus LOGITEM201303 DB und Einfügen von Daten in die 3 Tabellen, die Sie erwähnt haben, nicht wahr? Und Daten in jeder Zeile (kommen von LOGITEM DB) gehen in diese drei Tabellen wie angezeigt? – GayanSanjeewa

Antwort

33

können Sie die folgende Syntax für Einsätze verwenden

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

Wenn Sie Tabellen mit den gleichen Säulen hatten oder eine Ergebnismenge, die die gleichen Spalten als Ziel hatte, Sie müssen nicht Spalten in die angeben EINFÜGEN.

INSERT INTO dbo.Destination 
SELECT * 
FROM dbo.Source 

Diese beiden basieren auf der bereits erstellten Zieltabelle. Diese sind NICHT das gleiche wie SELECT * INTO dbo.Destination FROM dbo.Source