好了複雜的數據遷移,所以這是一個有趣的問題...SQL - 從舊體制到新結構
我想將數據從OldApplicationLogs移動表兩張表:
- UserSessionLogs
- ApplicationLogs
這是OldApplicationLogs的結構:
ID INT-PK
UserID INT-FK
PropertyID INT-FK
Controller VARCHAR
Action VARCHAR
EntityType VARCHAR
EntityKey VARCHAR
AbsoluteURL VARCHAR
IPAddress VARCHAR
...
這些都是我想將它移動到新的結構:
UserSessionLogs
ID INT-PK
UserID INT-FK
PropertyID INT-FK
IPAddress INT-FK
...
ApplicationLogs
ID INT-PK
UserSessionLogID INT-FK
EntityID INT-FK
EntityKey INT
Controller VARCHAR
Action VARCHAR
RelativeURL VARCHAR
Created VARCHAR
...
現在的做法我有記住:
- 將所有唯一的UserID,PropertyID,IPAddress視爲 UserSessionLogs的一行。
- 將數據從舊的應用程序日誌結構移動到新的應用程序日誌結構。
這裏有雲的SQL語句我開始寫...
SQL代碼,推薦給您的眼睛: http://kendtimothy.com/static/logs_so_30-12-2015.pdf
否則,這是SQL代碼:
將每個用戶事件的過去數據映射爲一個用戶會話。
SELECT ID, PropertyID, UserID, IPAddress INTO UserSessionLogs FROM OldApplicationLogs GROUP BY PropertyID, UserID, IPAddress
問題1:循環遍歷結果,將其插入UserSessionLogs。
INSERT INTO UserSessionLogs (PropertyID, IPAddress, UserID, StartDate)
VALUES (UserSessionLogs.PropertyID, UserSessionLogs.IPAddress, UserSessionLogs.UserID)
-
所有應用日誌
地圖過去的數據到新的結構。
SELECT * INTO AppLogs FROM OldApplicationLogs
問題2:同樣,我需要遍歷結果並插入ApplicationLogs
。
INSERT INTO ApplicationLogs (UserSessionLogID, [Action], Controller, Operation, Created, EntityID, EntityKey, RelativeURL)
VALUES (
問題3:我怎樣才能得到相關UserID
其中PropertyID
,UserID
和IPAddress
組合匹配?
UserSessions.ID,
AppLogs.Action,
AppLogs.Controller,
AppLogs.Operation,
AppLogs.LoggedDate
獲取具有相同表名的EntityID
。
(SELECT TableName
FROM Entities
WHERE AppLogs.EntityType = Entities.TableName),
演員以前VARCHAR
的EntityKey到INT
?的EntityKey。保持NULL原樣。
CAST(AppLogs.EntityKey AS INT),
將絕對URL(從過去的結構)轉換爲相對URL。
問題4 /建議:更好的方法來做到這一點任何建議超歡迎:)
REPLACE(AppLogs.AbsoluteURL, 'www.myapp.com/', '')
)
我會很感激的幫助/建議在此,歡呼:)
問題是什麼? –
@StanShaw問題實際上標記爲SQL代碼中的註釋。我將它標記爲 - 問題1, - 問題2等。希望它不會太麻煩。基本上,如何實現循環查詢結果並獲取與問題3相匹配的ID。 –
是的,你不需要遍歷任何東西,但是你應該根據連接編寫插入來保存你的原始關聯。我現在沒有時間回答,但會嘗試幫助編輯您的帖子以保持清晰。 –