2016-09-23 123 views
2

我目前爲一家爲服務生成器的公司工作,並且最近我們收到了大約6000件新設備的大量列表,看我是否可以編寫一個腳本來將數據導入到我們的Web應用程序的數據庫中,但對於IT的編碼方面,我仍然非常陌生。INSERT INTO SELECT * FROM,同時將數據類型轉換爲外鍵

我目前的解決方案是使用INSERT INTO查詢將數據拉入生產數據庫,但是我的目標是使此腳本儘可能地方便用戶,所以即使我碰巧移動到其他地方也可以使用它。

就這樣說,我的問題是如何編寫一個查詢來將「資產類型」字段(即發生器,ATS)轉換爲與該類型關聯的外鍵(1001,1002),然後插入它進入數據庫?這是可能的,還是必須在運行腳本之前將設備轉換爲fks?

我的確看到了有關改變數據的類似問題,但除非我只是誤解了答案,這似乎並不是我正在尋找的。

+1

取決於數據庫結構的外觀。請提供關於您要插入的表格的更多詳細信息,該資產類型表格包含您提供的這些類型和原始數據。 – Jens

+0

目標數據庫中的資產類型表非常簡單。大多數列是NULL值,唯一的兩個重要列是PK(1001,1002,1003,1004)和實際資產類型(發電機,ATS,消防泵等)。我要插入的表格包含來自目標數據庫上多個互連表格的數據,例如Customers,Sites和Equipment。我必須導入的數據是客戶名稱(客戶),站點編號,地址,狀態(站點),標籤號碼,設備類型,串行,千瓦尺寸,型號和製造商。類型和製造商是fks。 – sCrabtree

回答

0

使用臨時表...

create table Stage1 (AssetId INT identity(1000,1) primary key, AssetInfo varchar(20), OtherFields...); 

insert into Stage1 (AssetInfo, OtherFields) 
select distinct AssetInfo, OtherFields 
from ExistingAssetTable 
; 

然後你就可以使用現在生成的密鑰來填充你的另一臺

+0

我並不期待如此快速的回答,那真是太棒了。我不能說我完全理解代碼的每一部分,但這不是一個需要學習的問題。至於片段本身的功能,它會將數據導入到該表中,並將數據分配給相應的鍵,然後導入到目標表中? – sCrabtree

+0

這會創建一個臨時表(您將數據停放的表格,在使用之前使其適合新格式),然後填充它。確保更改字段名稱和數據類型(但不是AssetId字段)。 從這裏開始,你可以使用'insert into [existingtable] sselect [Stage1'語句中的[fields] – JohnHC

+0

好吧,我想我明白了。我只是將它導入到表格中,然後自己格式化,對吧?我可以問一下,這樣做的好處是什麼,而不是在導入前格式化?我知道我在另一個線程中看到有人說這與檢查錯誤等有關。那是對的嗎?對不起,問這麼多問題。 – sCrabtree

2

我會使用一個臨時表的頂部建議作爲JohnHC曾建議還可以使用一個SSIS包,他們可以在將來創建一個csv文件,將其放入一個特定的文件夾中,然後每隔15分鐘(或任何您選擇的)檢查該文件的作業將在運行該包時運行該包在該文件夾中找到具有特定名稱和格式的任何內容。會使它,所以他們甚至不需要看代碼,但只需要填充CSV文件。

+0

這聽起來很不錯。我需要看看,謝謝。 – sCrabtree

+0

當文件位於文件夾中時運行包/作業: http://www.sqlservercentral.com/articles/Integration+Services+%28SSIS%29/90571/ 使SSIS包可以將數據加載到來自csv文件的表格: http://blog.sqlauthority。COM/2011/05/12/SQL服務器 - 導入 - CSV文件,到數據庫表,使用,SSIS / – Zi0n1