SQL 2005數據庫轉為2000的終極解決方案


轉載至:http://chensyabc.blog.163.com/blog/static/10014285201010465943208/

參考2:http://www.cnblogs.com/tjsquall/archive/2007/12/21/1008258.html

我實際轉換中有些折騰,特記錄於此。

 

=================轉載開始=====

2005建的數據庫要在2000的數據庫上使用,由於不向上兼容,導致各種問題,已經頭疼三天了,今天終於解決了,解決方案如下:

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

首先,附加的時候會碰到這樣的問題:

錯誤602 未能在 sysindexes 中找到數據庫 ID 12 中對象 ID 1 的索引 ID 1 對應的行。請對 sysindexes 運行 DBCC CHECKTABLE。

 

於是乎很郁悶。

(插一段片頭話,如果一台電腦上有2000另外也有2005,應該也是可以完成的,但是希望各位安裝2005的開發版,企業版很可能安裝不了服務器組件,也就無法建立兼容性為90的數據庫)

到網絡上查找了方法:

因為數據庫附加到2005的時候, 數據庫文件已經自動升級到2005, 所以在2000下是無法再附加的(沒有向上兼容的)直接restore或附加是不行的, 用腳本+導數據肯定沒有問題。 
2005轉到2000的步驟步驟 
1. 生成for 2000版本的數據庫腳本 
2005 的manger studio 
-- 打開"對象資源管理器"(沒有的話按F8), 連接到你的實例 
-- 右鍵要轉到2000的庫 
-- 任務 
-- 生成腳本 
-- 在"腳本向導"的"選擇數據庫"中, 確定選擇的是要轉到2000的庫 
-- 勾選"為所選數據庫中的所有對象編寫腳本" 
-- 在接下來的"選擇腳本選項"中, 找到"為服務器版本編寫腳本"項, 選擇"SQL Server 2000" 
-- 其他選項根據需要設置 
-- 最后把腳本保存到一個 .sql 腳本文件 
2. 在2000中創建目標數據庫 
在查詢分析器(或2005的manger studio在打開腳本文件), 連接到SQL Server 2000,執行上面生成的腳本.以創建一個新的數據庫    --created by o07-csy
3. 將數據從2005導到2000 
2005 的manger studio 
-- 打開"對象資源管理器"(沒有的話按F8), 連接到你的實例 
-- 右鍵要轉到2000的庫 
-- 任務 
-- 導出數據 
-- 在"SQL Server 導入和導出向導"的"選擇數據源"步驟中, 確定選擇的是要導出的數 據庫 
-- 在"選擇目標"步驟中, 連接到 2000, 並選擇步驟2新建的庫 
-- 在"選擇源表和源視圖"中, 選擇所有的表 
-- 最后完成

 

(在這中間分析下這個解決辦法的精妙和未考慮到的一些問題:

首先不得不承認它的思想能夠解決這樣的問題,既然不能直接附加,那就一點一點,湊成它,分成建數據庫和轉移數據。但是,中間應該分析的問題是,從2005生成的腳本是不是肯定能在2000中運行,因為不能附加就是因為2005和2000的差異。中間,出現varchar(max)的創建失敗,因為其在2005后才有的;另一個問題就是自增,如果單純的A,B,C表,沒有自增,沒有外鍵,這是這種方法肯定能解決的,然而數據庫必然存在這些,所以有會出現兩種錯誤,自增的列為只讀的,外鍵決定了先后恢復數據的順序

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

很欣慰地找到這個方法,很開心,實踐它,但是又遇到一個錯誤,就是在生成腳本的時候出現了錯誤:

目標服務器版本不支持該對象或該對象的一個屬性。

 

繼續找解決方案:

只要在數據的屬性中設置兼容級別為 Sql Server 2000(80)即可

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

生成成功了,在打開執行的時候又遇到一個問題:

“max”附近有語法錯誤

 

原來varchar(max)是2005數據庫后才有的,2000自然不認識,找解決方案:

把生成的SQL腳本打開,批量的把[varchar](max)替換成[varchar](4000),或者把[varchar](max)替換成[nvarchar](8000),雙或者把[varchar](max)替換成[text]

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

好了,創建成功了表,接下去到了導出數據了按照步驟,一切都選好了,到完成,出現錯誤:

- 執行之前 (錯誤)

消息

·錯誤 0xc0202009: 數據流任務: 出現 OLE DB 錯誤。錯誤代碼: 0x80040E21。
已獲得 OLE DB 記錄。源:“Microsoft SQL Native Client” Hresult: 0x80040E21 說明:“多步 OLE DB 操作產生錯誤。如果可能,請檢查每個 OLE DB 狀態值。沒有工作被完成。”。
 (SQL Server 導入和導出向導)
 

·錯誤 0xc0202025: 數據流任務: 無法創建 OLE DB 取值函數。請查看列元數據是否有效。
 (SQL Server 導入和導出向導)
 

錯誤 0xc004701a: 數據流任務: 組件“目標 - IPConfig”(28) 在執行前階段失敗,返回的錯誤代碼為 0xC0202025。
 (SQL Server 導入和導出向導)

 

繼續查找原因,最后分析出來, 原來還是那個varchar(max),從varchar(max)到varchar(4000)依然沒用,存在錯誤。

解決方法:

將2005數據庫中的varchar(max)都改為var(4000)

[應該為varchar(4000)吧]

 

 

我是這樣解決的,將源的字段類型改為varchar 導出的腳本也改為varchar 並可避免此錯誤

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

哈哈,終於看到復制了多少多少數據,等等,又打×了,暈暈暈暈暈,看看錯誤:

A表說B表的那一列怎么怎么樣

 

自己想解決方法,新建視圖,全部表格添加進去,看外鍵連接,然后按照順序導數據,好了,大功告成!!!!!

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

整理下終極解決方案,還是以腳本和數據一個一個來為主導思想:

1,在2005 Management Studio中

右擊轉換的數據庫,“屬性”,將兼容級別為 Sql Server 2000(80),

2,在2005 Management Studio中

--"任務"-->"生成腳本" 

-- 在"腳本向導"的"選擇數據庫"中, 確定選擇的是要轉到2000的庫 

-- 勾選"為所選數據庫中的所有對象編寫腳本" 

-- 在接下來的"選擇腳本選項"中, 找到"為服務器版本編寫腳本"項, 選擇"SQL Server 2000"

-- 其他選項根據需要設置

-- 最后把腳本保存到一個 .sql 腳本文件 

3,在2005 Management Studio中

使用2005 management studio連接到2000實例(可以本地以及遠程),在實例中創建同名數據庫,然后打開上面生成的腳本,將其中的[varchar](max)批量替換成[varchar](4000),執行,這樣就創建好了各個表

4,在2005 Management Studio中

將原2005數據庫中的各表列屬性為varchar(max)的轉換為varchar(4000),然后新建視圖,查看各表的外鍵關系,按照順序來導出數據(順序如何決定不用我說吧,這都不會那就……

5,在2005 的Management Studio中

-- 打開"對象資源管理器"(沒有的話按F8), 連接到你的實例

-- 右鍵要轉到2000的庫-->"任務"-->"導出數據"

-- 在"SQL Server 導入和導出向導"的"選擇數據源"步驟中, 確定選擇的是要導出的數據庫

-- 在"選擇目標"步驟中, 連接到2000, 並選擇步驟2新建的庫

-- 在"選擇源表和源視圖"中, 選擇所有的表,並且將有ID為標識的表點擊后面的編輯,勾選插入標識

-- 在"選擇源表和源視圖"中, 選擇所有的表,並且將有ID為標識的表點擊后面的編輯,勾選插入標識 這個關鍵

 

 

然后將所有需要導出數據的列,點擊后面的“編輯”,勾選“使用標量XX”,確定,完成,大功告成!!!!!!!


免責聲明!

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



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