SQL2005生成SQL2000腳本的一些解決方法
下午,客戶問我,關于SQL2005下創建的數據庫,如需要導入到SQL2000下使用要怎么辦。;;;;;;SQL2005的語法和SQL2000的語法有所不同,試了幾次發現數據庫無法使用備份和附加的方法轉換到SQL2000。必須先轉換成腳本文件,然后在2000中用這個腳本建立目標庫,再用數據導入/導出把數據從2005導到2000即可,按SQL2005提供轉換到SQL2000的方法,經過自定義生成的對象。如果想直接restore或附加應該是不行的,;用腳本+導數據肯定沒有問題。以下是SQL2005轉到2000的步驟:1.;生成for;2000版本的數據庫腳本2005;的manger;studio--;打開'對象資源管理器'(沒有的話按F8),;連接到你的實例--;右鍵要轉到2000的庫--;任務--;生成腳本--;在'腳本向導'的'選擇數據庫'中,;確定選擇的是要轉到2000的庫--;勾選'為所選數據庫中的所有對象編寫腳本'--;在接下來的'選擇腳本選項'中,;找到'為服務器版本編寫腳本'項,;選擇'SQL;Server;2000'--;其他選項根據需要設置--;最后把腳本保存到一個;.sql;腳本文件2.;在2000中創建目標數據庫在查詢分析器(或2005的manger;studio在打開腳本文件),;連接到SQL;Server;2000,執行上面生成的腳本.以創建一個新的數據庫3.;將數據從2005導到20002005;的manger;studio--;打開'對象資源管理器'(沒有的話按F8),;連接到你的實例--;右鍵要轉到2000的庫--;任務--;導出數據--;在'SQL;Server;導入和導出向導'的'選擇數據源'步驟中,;確定選擇的是要導出的數據庫--;在'選擇目標'步驟中,;連接到;2000,;并選擇步驟2新建的庫--;在'選擇源表和源視圖'中,;選擇所有的表--;最后完成以下是SQL2005生成的腳本:;1;;SET;ANSI_NULLS;ON2;;GO3;;SET;QUOTED_IDENTIFIER;ON4;;GO5;;IF;NOT;EXISTS;(Select;*;FROM;sys.objects;Where;object_id;=;OBJECT_ID(N'[dbo].[web3_News]');AND;type;in;(N'U'))6;;BEGIN7;;Create;TABLE;[dbo].[web3_News](8;;;;[ID];[int];IDENTITY(1,1);NOT;NULL,9;;;;[Title];[varchar](100);NULL,10;;;;[Contents];[varchar](250);NULL,11;;CONSTRAINT;[PK_web3_News];PRIMARY;KEY;CLUSTERED;12;;(13;;;;[ID];ASC14;;)WITH;(IGNORE_DUP_KEY;=;OFF);ON;[PRIMARY]15;;);ON;[PRIMARY]16;;END再看一下SQL2000生成的的腳本:1;;if;exists;(select;*;from;dbo.sysobjects;where;id;=;object_id(N'[dbo].[web3_News]');and;OBJECTPROPERTY(id,;N'IsUserTable');=;1)2;;drop;table;[dbo].[web3_News]3;;GO45;;Create;TABLE;[dbo].[web3_News];(6;;;;[ID];[int];IDENTITY;(1,;1);NOT;NULL;,7;;;;[Title];[varchar];(100);COLLATE;Chinese_PRC_CI_AS;NULL;,8;;;;[Contents];[varchar];(250);COLLATE;Chinese_PRC_CI_AS;NULL;9;;);ON;[PRIMARY]10;;GO1112;;Alter;TABLE;[dbo].[web3_News];WITH;NOCHECK;ADD;13;;;;CONSTRAINT;[PK_web3_News];PRIMARY;KEY;;CLUSTERED;14;;;;(15[ID]16;;;;);;ON;[PRIMARY];17;;GO把SQL2005下選用生成SQL2000的腳本在SQL2000下使用,結果出現了一些錯誤:
不知道是不是我的方法有問題,居然按微軟的方法生成的腳本還是有錯誤,接下來我把WITH;(IGNORE_DUP_KEY;=;OFF);ON;[PRIMARY]去掉,語法是沒有錯誤了,但還是出現了兩個錯誤,系統提示未能找到存儲過程;'sys.objects',列名;'object_id';無效,還要把sys.objects替換成dbo.sysobjects,object_id替換成id;(把object_去掉)然后再運行才能正常。這是一個簡單的表,相關定義不多,如果定義約束、因子填充等條件更多錯誤,沒辦法,暫時找不到解決的方法只能手工修改了,一個字,累……希望有高手們提供更好的方法出來,供大家學習一下!
