轉載至: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”,確定,完成,大功告成!!!!!!!