Ce que j'essaie de faire: lire les journaux et insérer les données nécessaires dans 3 tableaux différents qui obtiennent des informations les uns des autres.
LOG_ITEM201303
se trouve sur gamelogs db.Mail_Item_Table
, Mail_List_Table
, Mail_Message_Table
se trouve sur le jeu db.
Les tables de messagerie sont connectées via les index.
CHAR_KEY
, NAME
, ITEMNUM
sont les valeurs que je dois utiliser pour mes requêtes.
La requête pour moi d'obtenir les données des journaux:
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')
Exemple de résultat de la requête de journaux ci-dessus (les résultats réels totaux sont en 600+):
CHAR_KEY NAME ITEMNUM
-----------+----------------+-----------
28257 | clarkailey | 14438
894367 | Wolf | 15023
2869858 | HOPEINME | 14437
Maintenant, je dois insérer automatiquement chaque ligne dans cette requête:
CHAR_KEY NAME ITEMNUM
-----------+----------------+-----------
2869858 | HOPEINME | 14437
(cette requête montre un exemple du 3e exemple de données ci-dessus inséré ...
au lieu de faire cette requête pour chaque entrée, y a-t-il un moyen pour que cela se fasse plus rapidement?)
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())
Ma question:
Comment automatiser tout cela, que la requête lira tous les journaux et insérera les données ligne par ligne. Merci beaucoup.
Puis-je utiliser @variables pour cela?
Vous pouvez utiliser la syntaxe suivante pour les insertions
INSERT INTO dbo.Destination (Col1, Col2, Col3)
SELECT Col1, Col2, Col3
FROM dbo.Source
Si vous aviez des tables avec les mêmes colonnes ou un jeu de résultats qui avait les mêmes colonnes que votre destination, vous n'avez pas besoin de spécifier de colonnes dans INSERT.
INSERT INTO dbo.Destination
SELECT *
FROM dbo.Source
Ces deux éléments sont basés sur votre table de destination déjà en cours de création. Ce sont PAS identiques à SELECT * INTO dbo.Destination FROM dbo.Source