2013-03-24 47 views
16

Điều tôi đang cố gắng làm: đọc nhật ký và chèn dữ liệu cần thiết vào 3 bảng khác nhau nhận thông tin từ nhau.Chèn Microsoft SQL Server từ truy vấn chọn

LOG_ITEM201303 được tìm thấy trên db gamelogs.
Mail_Item_Table, Mail_List_Table, Mail_Message_Table được tìm thấy trên trò chơi db.

Bảng thư được kết nối thông qua các Chỉ mục.

CHAR_KEY, NAME, ITEMNUM là các giá trị tôi cần sử dụng cho truy vấn của mình.

Truy vấn cho tôi để có được các dữ liệu từ các bản ghi:

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

Mẫu kết quả của các bản ghi truy vấn trên (tổng cộng kết quả thực tế là tại trên 600):

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

Bây giờ tôi cần phải tự động chèn mỗi hàng vào truy vấn này:

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

(truy vấn này hiển thị ví dụ về dữ liệu mẫu thứ 3 ở trên đang được chèn ted ...
thay vì làm truy vấn này cho mỗi mục là có một cách để này để thực hiện nhanh hơn)

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

Câu hỏi của tôi:

Làm thế nào để tự động hóa tất cả điều này, rằng các truy vấn sẽ đọc tất cả các nhật ký và chèn hàng dữ liệu theo hàng. Cảm ơn bạn rất nhiều.


Tôi có thể sử dụng @variables cho điều này không?

+0

select..into khoản trợ giúp? http://msdn.microsoft.com/en-us/library/ms190750(v=sql.90).aspx – Tim

+0

Tôi đang xem xét nó. Cảm ơn. [sửa] Seem giống như tôi không thể sử dụng 'SELECT INTO'. – madziikoy

+0

Về cơ bản những gì bạn muốn làm là đọc dữ liệu từ LOGITEM201303 DB và chèn dữ liệu vào 3 bảng bạn đã đề cập, phải không? Và dữ liệu trong mỗi hàng (đến từ LOGITEM DB) sẽ đi vào ba bảng này như được hiển thị? – GayanSanjeewa

Trả lời

33

Bạn có thể sử dụng cú pháp sau đây để chèn

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

Nếu bạn đã có bảng với các cột tương tự hoặc một tập kết quả đó có các cột tương tự như điểm đến của bạn, bạn không cần phải chỉ định các cột trong CHÈN.

INSERT INTO dbo.Destination 
SELECT * 
FROM dbo.Source 

Cả hai đều được xác định trên bảng đích của bạn đã được tạo. Đây là NOT giống như SELECT * INTO dbo.Destination FROM dbo.Source

Các vấn đề liên quan