SQL2005生成SQL2000腳本的一些解決方法
下午,客戶問(wèn)我,關(guān)于SQL2005下創(chuàng)建的數(shù)據(jù)庫(kù),如需要導(dǎo)入到SQL2000下使用要怎么辦。;;;;;;SQL2005的語(yǔ)法和SQL2000的語(yǔ)法有所不同,試了幾次發(fā)現(xiàn)數(shù)據(jù)庫(kù)無(wú)法使用備份和附加的方法轉(zhuǎn)換到SQL2000。必須先轉(zhuǎn)換成腳本文件,然后在2000中用這個(gè)腳本建立目標(biāo)庫(kù),再用數(shù)據(jù)導(dǎo)入/導(dǎo)出把數(shù)據(jù)從2005導(dǎo)到2000即可,按SQL2005提供轉(zhuǎn)換到SQL2000的方法,經(jīng)過(guò)自定義生成的對(duì)象。如果想直接restore或附加應(yīng)該是不行的,;用腳本+導(dǎo)數(shù)據(jù)肯定沒(méi)有問(wèn)題。以下是SQL2005轉(zhuǎn)到2000的步驟:1.;生成for;2000版本的數(shù)據(jù)庫(kù)腳本2005;的manger;studio--;打開(kāi)'對(duì)象資源管理器'(沒(méi)有的話按F8),;連接到你的實(shí)例--;右鍵要轉(zhuǎn)到2000的庫(kù)--;任務(wù)--;生成腳本--;在'腳本向?qū)?的'選擇數(shù)據(jù)庫(kù)'中,;確定選擇的是要轉(zhuǎn)到2000的庫(kù)--;勾選'為所選數(shù)據(jù)庫(kù)中的所有對(duì)象編寫腳本'--;在接下來(lái)的'選擇腳本選項(xiàng)'中,;找到'為服務(wù)器版本編寫腳本'項(xiàng),;選擇'SQL;Server;2000'--;其他選項(xiàng)根據(jù)需要設(shè)置--;最后把腳本保存到一個(gè);.sql;腳本文件2.;在2000中創(chuàng)建目標(biāo)數(shù)據(jù)庫(kù)在查詢分析器(或2005的manger;studio在打開(kāi)腳本文件),;連接到SQL;Server;2000,執(zhí)行上面生成的腳本.以創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)3.;將數(shù)據(jù)從2005導(dǎo)到20002005;的manger;studio--;打開(kāi)'對(duì)象資源管理器'(沒(méi)有的話按F8),;連接到你的實(shí)例--;右鍵要轉(zhuǎn)到2000的庫(kù)--;任務(wù)--;導(dǎo)出數(shù)據(jù)--;在'SQL;Server;導(dǎo)入和導(dǎo)出向?qū)?的'選擇數(shù)據(jù)源'步驟中,;確定選擇的是要導(dǎo)出的數(shù)據(jù)庫(kù)--;在'選擇目標(biāo)'步驟中,;連接到;2000,;并選擇步驟2新建的庫(kù)--;在'選擇源表和源視圖'中,;選擇所有的表--;最后完成以下是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下使用,結(jié)果出現(xiàn)了一些錯(cuò)誤:
不知道是不是我的方法有問(wèn)題,居然按微軟的方法生成的腳本還是有錯(cuò)誤,接下來(lái)我把WITH;(IGNORE_DUP_KEY;=;OFF);ON;[PRIMARY]去掉,語(yǔ)法是沒(méi)有錯(cuò)誤了,但還是出現(xiàn)了兩個(gè)錯(cuò)誤,系統(tǒng)提示未能找到存儲(chǔ)過(guò)程;'sys.objects',列名;'object_id';無(wú)效,還要把sys.objects替換成dbo.sysobjects,object_id替換成id;(把object_去掉)然后再運(yùn)行才能正常。這是一個(gè)簡(jiǎn)單的表,相關(guān)定義不多,如果定義約束、因子填充等條件更多錯(cuò)誤,沒(méi)辦法,暫時(shí)找不到解決的方法只能手工修改了,一個(gè)字,累……希望有高手們提供更好的方法出來(lái),供大家學(xué)習(xí)一下!
