2013-03-24 5 views
16

से माइक्रोसॉफ्ट एसक्यूएल सर्वर सम्मिलित करें जो मैं करने की कोशिश कर रहा हूं: लॉग पढ़ें और आवश्यक डेटा को 3 अलग-अलग तालिकाओं में डालें जो एक-दूसरे से जानकारी प्राप्त करते हैं।चुनिंदा क्वेरी

LOG_ITEM201303 Gamelogs डीबी पर पाया जाता है।
Mail_Item_Table, Mail_List_Table, Mail_Message_Table खेल डीबी पर पाया जाता है।

मेल टेबल्स इंडेक्स के माध्यम से जुड़े हुए हैं।

CHAR_KEY, NAME, ITEMNUM मेरे प्रश्नों के लिए उपयोग करने के लिए आवश्यक मूल्य हैं।

क्वेरी मुझे लॉग से डेटा प्राप्त करने के लिए: ऊपर लॉग क्वेरी की

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 

(यह क्वेरी इंसियर होने के ऊपर तीसरे नमूना डेटा का एक उदाहरण दिखाती है टेड ...
बजाय प्रत्येक प्रविष्टि के लिए इस क्वेरी बनाने का काम को पूरा करने के लिए इस तेजी से करने के लिए एक तरीका है)

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

चयन.इन से क्लॉज सहायता के समान हैं? http://msdn.microsoft.com/en-us/library/ms190750(v=sql.90).aspx – Tim

+0

मैं इसे देख रहा हूं। धन्यवाद। [संपादित करें] सीम की तरह मैं 'चयन INTO' का उपयोग नहीं कर सकता। – madziikoy

+0

मूल रूप से आप जो करना चाहते हैं वह LOGITEM201303 डीबी से डेटा पढ़ता है और आपके द्वारा वर्णित 3 टेबल पर डेटा डालें, है ना? और प्रत्येक पंक्ति में डेटा (LOGITEM डीबी से आ रहा है) प्रदर्शित होने के रूप में इन तीन तालिकाओं में जाएगा? – 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

संबंधित मुद्दे