SQLSERVER如何導入數據保持ID不變(ID為自增主鍵)


使用SQL SERVER最操蛋的就是導入數據,以前用企業管理器直接導數據,導一次罵N次娘,在罵了微軟無數次娘之后總結了一個方法揍合着還算受用。

其核心要點就是要將數據結構導入到目標數據庫服務器上,再來導數據,如果直接使用sql企業管理器向目標數據庫導入數據,就會發生一系列操蛋的問題:

ID不能自增了、ID改變了、主鍵索引被刪了。

其實直接導還是有辦法保持id主鍵自增、id不變的,就是到了編輯映射這一步,要依次選中每個表編輯映射,編輯sql,在id列加上PRIMARY KEY IDENTITY(1,1),然后勾選標識插入,這樣導過去的數據和本地數據就是一樣的,但是表多的話,修改sql相當蛋疼。

所以不得不說一句真TMD的操蛋,微軟更新無數次數據庫版本了還是沒好好解決一下這個問題,就不能來個一鍵導入數據嗎。

而實際使用中,可能附加數據庫還比較常用,但是微軟TMD不停的更新版本,導致個人電腦和公司電腦和服務器電腦,另外還可能會更換服務器,這些電腦上的版本不一樣,就無法附加數據庫,一般的技術人員可能很少用,但作為站長兼程序員的人,應該深有體會。

 

下文要說的就是先導入結構,再導入數據!

 

首先在源數據庫上右鍵-任務-生成腳本,下一步,下一步,到了保存sql文件這里點高級,接下來有兩種情況:

1:導出數據結構和數據(適合少量數據,幾千條以內,數據多了腳本文件太大在sql軟件上無法執行,要用sqlcmd,但這個工具要看人品,人品不好遇到一大堆操蛋的問題,還有另一個方法是osql,直接用win32 cmd執行sql文件,但速度慢,我上次幾萬條數據執行了20多分鍾)。

首先,在高級里面找到為服務器版本編寫腳本這項,右邊選擇你的服務器數據庫版本,其次,找到要編寫腳本的數據的類型這項,右邊選擇架構和數據

然后點確定,繼續下一步完成。

把生成的sql文件在你的服務器上的sql軟件里面打開,根據需要可以修改一下腳本中的數據庫地址,點擊執行,就會自動創建數據庫、表,然后導入數據(如果數據庫存在,先刪除)。

上面這種情況是你可以在服務器上刪除、創建數據庫,如果不能刪除重新創建,那就要使用原先的數據庫,所以在服務器上打開腳本找到alter database 把前面的代碼全部刪掉,接下來腳本中的數據庫名稱如果和服務器上的不一樣就改一下,執行腳本。

注意一個問題:

如果數據庫存在不能刪除重建,那就刪除數據庫里面的表,刪除代碼中alter database前面的代碼,修改腳本中的database名稱,再執行。

2:僅導出結構。

導出結構后把代碼考到服務器數據庫上去執行,默認會創建數據庫,所以如果數據庫存在就先刪除,不能刪除的話,就刪除里面的表,刪除代碼中alter database前面的代碼,修改腳本中的database名稱,再執行,這樣就能在服務器上創建好數據庫結構,接下來是導入數據。

如果是少量數據,可以到直接生成腳本,高級里面選擇僅導出數據,然后在服務器上直接執行。

如果是大量數據,用sql企業管理器連接目標數據庫(直接在本地數據庫右鍵導出數據,再去連目標數據庫也行),

右鍵導入數據,然后直到選擇表源和源視圖這里,勾選要導入的表和視圖后,然后看看這些一一對應的表對應的行是不是選中狀態(不是前面那個勾,是整行),點擊下面的編輯映射:

如果是第一次導入數據,勾選啟用標識插入,一直下一步就能導入成功。

如果不是第一次,表中有數據,就同時勾選刪除現有表中的行和標識插入,或者把三個勾都勾上,這里值得一提的按我們人的正常理解可以勾選“刪除並重新創建目標表啟用標識插入”就行了啊,表都刪除重建了肯定舊數據不在了噻,但是TM不行,這樣導入后之前的數據居然還存在,你說腦殘不腦殘,所以這里要么勾最后兩個,要么三個全勾上。

順便說一下:批量編輯映射這個功能好像只有sql2008及以上版本才有,之前使用sql2005還沒有,只能一個表一個表的編輯映射,有幾十個表的情況下你可以想象,基本上是修改一個表,罵一次娘。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM