數據庫遷移,從Access導入到Sql Server需要注意哪些事項
前陣子由于數據訪問量大,以及條件允許,將網站原來的Access數據庫換成了Sql Server,記錄下自己在換數據庫的時候的一些步驟和心得。
切換之前大概想了協議愛,大概要涉及到這些地方:
換到sql server服務器上的步驟:
1,在C#代碼層面上將所有Oledb切換到SqlParameter
2,分頁公共方法的修改:原來access使用的分頁方法雖說在Sql Server也能用,但是效率肯定不及Sql Server原生的ROW_NUMBER。
3,頂層的一些查詢語句:原來可能會在業務層上寫一些查詢語句的片段,現在就不能用了,比如說Access的“是/否”字段,不能再設置為True/False,而要改成1/0了
4,測試
5,切換數據庫(導入表結構數據,設置主鍵等)
在執行第5步時, 首先百度到的就是這篇文章,幫了大忙了:http://www.cnblogs.com/hnyei/archive/2012/05/29/2523728.html
本以為可以很輕松的搞定,但是在實際操作的時候還是遇到了問題:
需求:
1,歷史數據的主鍵不能更改,這個涉及到Seo,如果ID改了好多被百度收錄的內容就沒有了
2,導入數據的時候能盡可能的簡單,盡量下一步下一步的操作而不產生大量的體力勞動
3,發布時間不能太長,將網站訪問異常的時間盡量縮短。
問題:
1,Sql Server在導入數據的時候,會自動將表結構帶過來,但是自增長,主鍵和字段默認值是不會帶過來的!!!!
解決方案:
如果要帶自增長鍵,必須要一個表一個表設置,而且這種設置還不能保存成腳本,只對本次導入有效!顯然這種方式是不可行的,因為我不能一次導入成功,肯定要實驗很多次,如果每次都這樣設置會非常麻煩。看來只能寫腳本了,畢竟可反復執行!
寫腳本的話,主鍵和默認值很好寫,如下
alter table dra_DramaVer
add CONSTRAINT PK_dra_DramaVer PRIMARY KEY CLUSTERED
(
ID
)
GO
ALTER TABLE [dbo].[dra_DramaVer] ADD CONSTRAINT [DF_dra_DramaVer_ShowOrder] DEFAULT ((0)) FOR [ShowOrder]
GO
但是讓主鍵自增長就難了!!百度了半天,最后得出的結論是:一個表一旦建好了,將某個字段改為自增長唯一的方式就是將這個字段刪掉,然后重新新建,這在我目前這種需求下是不能被接受的,那樣的話歷史數據的主鍵字段就會全部被重置,違背了需求1。
最后不得已,只能在導入完數據之后,一個一個表的編輯,將主鍵的自增長加上。
這就是這次導入數據的全部經驗,寫出來希望和大家探討出更好的方案。