小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Access轉SqlServer的注意事項(相對完整版)

 悟靜 2009-07-16
1.         自動增加字段需要重寫。在access中經(jīng)常使用的自動編號字段,導入到mssql后,他并不是自增型的int,需要手工設置,把導入后的自動編號字段的標識的“否”改為“是”,“種子”和“遞增量”都為“1,才能成為自動編號。

2.         所有的默認值都丟失了。主要是數(shù)字類型和日期類型。以前添加記錄的時候,有些字段是不需要手動用程序賦值的,像日期等,現(xiàn)在則需要再添加多一句rs("newsDate")=now()的。

3.         所有now(),time(),date()要改成getdate(),網(wǎng)上有這么說的,但是我改了之后程序反而運行不正常。不改倒還可以。

4.         所有datediff(d', time1, time2)要改成datediff(day, time1, time2)

5.         所有datediff(ww, time1, time2)要改成datediff(week, time1, time2)

6.         所有datediff(d', time1, time2)要改成datediff(day, time1, time2)

7.         mssql server中,有許多保留字,在access中是沒有的,當你把數(shù)據(jù)導入到mssql的時候,問題就出來了。mssql在導入的時候,會自動給這些字段(包括數(shù)據(jù)庫中的表名)加上“[字段名]”,如果想去掉[],那么改字段名字為不是mssql的保留字。

8.         有些地方用conn.execute只能讀取到部分字段的數(shù)據(jù),有些字段的數(shù)據(jù)就讀不到。非常奇怪,查看了很多關于asp中的rs.openconn.execute的區(qū)別,也沒有找到本質的答案。真是奇怪。

9.         日期函數(shù)不相同,在對ACCESS數(shù)據(jù)庫處理中,可用date()、time()等函數(shù),但對SQL SERVER數(shù)據(jù)庫處理中,只能用datediff,dateadd等函數(shù),而不能用date()、time()等函數(shù)。

10.     轉化時,跟日期有關的字段,SQL SERVER默認為smalldatetime型,我們最好將它變?yōu)?/span>datetime型,因為datetime型的范圍比smalldatetime型大。有時用smalldatetime型時,轉化失敗,而用datetime型時,轉化成功

11.     isnull(rowname)要改成rowname = null

12.     CursorType要改成1,也就是打開數(shù)據(jù)庫時要給出第一個數(shù)字參數(shù)為1,否則記錄可能顯示不完整

13.     備注類型要通過cast(column as varchar)來使用

14.     true/false類型不能使用,要變?yōu)?/span>1/0

15.     在對ACCESS數(shù)據(jù)庫處理中,sql語句中直接可以用一些VB的函數(shù),像cstr()函數(shù),而對SQL SERVER數(shù)據(jù)庫處理中,卻不能用

16.     原來ASP里的“DELETE * FROM ……”要改為“DELETE FROM ……”,有部分運作正常,有部分會無效。

17.     access里面除法可以使用”"”或者”/”,MSSQL里面只能使用”/

18.     首先如果一開始就需要制作SQLSERVER的網(wǎng)站,那么最好將你的愛機裝上WINDOWS2000或者2003這樣的SERVER版,這樣的版本是支持SQLSERVER正式版的安裝的,而XP只能支持個人版或者開發(fā)版,我沒有裝過,但對于調試網(wǎng)站而言最好還是在正式版下工作,轉化的整個過程不算太復雜,但至少可以省下一些精力。我的愛機是XP,所以只好先用ACCESS調試。

19.     好了,當你找到一臺裝有SQLSERVER的機器時,你便可以開始轉換并調試了。

a)         先利用轉化軟件:CooSel2.0 CreateSQL V1.05,我用的這個,非常好用。具體操作的話,我用的是生成升遷SQL腳本,保存為 *.sql文件后,在SQL2000的查詢分析器里調入執(zhí)行。而SQLSERVER的具體操作在此不便贅述。這樣,你的數(shù)據(jù)庫就轉化成了MSSQL數(shù)據(jù)庫

b)        asp而言,首先是數(shù)據(jù)庫連接文件的修改:這點可以參考動網(wǎng)論壇的conn.asp

20.     Dim ConnStr

21.     'sql數(shù)據(jù)庫連接參數(shù):數(shù)據(jù)庫名、用戶密碼、用戶名、連接名(本地用local,外地用IP

Dim SqlDatabaseName,SqlPassword,SqlUsername,SqlLocalName

SqlDatabaseName = "dvbbs7" '數(shù)據(jù)庫名稱

SqlPassword = "" '數(shù)據(jù)庫密碼

SqlUsername = "dvbbs" '數(shù)據(jù)庫用戶名

SqlLocalName = "(local)"

ConnStr = "Provider = Sqloledb; User ID = " & SqlUsername & "; Password = " & SqlPassword & "; Initial Catalog = " & SqlDatabaseName & "; Data Source = " & SqlLocalName & ";"

On Error Resume Next

Set conn = Server.CreateObject("ADODB.Connection")

conn.open ConnStr

a)         這時候你可以先瀏覽一下新的網(wǎng)站了,如果出錯了,也不用擔心,但是有很多頁面已經(jīng)是可以正常顯示了。接著就是對整站程序的修改了。尤其要注意的是:所有的修改都只針對對數(shù)據(jù)庫進行操作的語句,幾乎全是對SQL語句的修改。而在一般的代碼中是絕對不需要修改的!否則會出錯!!

b)        真假值的判斷。ACCESS提供了布爾值這一數(shù)據(jù)類型,但是在SQLSERVER中,如果你在SQL語句中填寫Where AA=True則是錯誤的,因為MSSQL不支持在數(shù)據(jù)庫中TrueFalse的判斷。這時候你需要將所有SQL語句中的TrueFalse改為10。而在一般的程序中,例如rs("aa")=True則不需要修改!因為這句話并不是對數(shù)據(jù)庫的操作??赡苣銜f這樣改起來,對于大網(wǎng)站而言,是非常麻煩的,的確,但有一些比較簡便的方法。比如在dreamweaver中,你可以利用整個文件夾的查找,找出所有的TrueFalse,然后篩選出對數(shù)據(jù)庫進行操作的TrueFalse并將他們改成10。另外還有一點:在SQLSERVER中也需要更改一下,ACCESS轉化后布爾值變成了Bit值,最好將默認值設為0,即與ACCESS一樣設置默認值為False。

c)        有一些網(wǎng)站中提到:sql數(shù)據(jù)庫表是沒有自動字段的,因此原來access中的自動字段被轉換成了普通字段,需要手工改成標識類型,增量為1。這點其實軟件在轉化的過程中已經(jīng)幫你完成了,如果你是手工轉化的話,確實需要修改標識類型。還有一點我沒有遇到過,但是有的網(wǎng)站也提到了:空值的表示:在access中,判斷空值一般用是否=""來表示,但是這在SQL中往往出錯,如果遇到出錯的問題或者程序運行不正常,可以改成如這樣判斷:where (name is null)。

d)        如果你在SQL語句中同時使用了VB函數(shù),很遺憾,這在MSSQL中是不能被辨認的,最好的方法是先將他在SQL之外處理,然后存入變量中導入到SQL語句中。

e)         最主要的還是時間函數(shù)的各種修改,這占到了工作量的90%。其一是將所有數(shù)據(jù)庫操作語句中的NOW()轉化成GETDATE();其二是datediffdateadd這類函數(shù)需要將第一項中的引號去掉,即datediff("s",date1,date2)改為datediff(s,date1,date2);其三,ACCESS中時間字符串都用#括起來,而MSSQL中是用''來表示的,即等同于一般的字符串;在accesssql語句中的時間使用變量查詢的時候,大家一般使用”select * from aaaa while time=#&變量名&#”,在mssql中是不行的,他的語法是“select * from aaaa while time=’”&變量名&”‘””。(意思是讓你把日期時間變量當成字符串來使用,呵呵~~~

22.     其四有一些時間函數(shù)在MSSQL中是不能被辨認的,基本上所有的SQLSERVER中的時間日期函數(shù)如下:

23.     day(), month(), year()

24.     dateadd(datepart, number, date), datapart指定對那一部分加,number知道加多少,date指定在誰的基礎上加。datepart的取值包括,year,quarter,month,dayofyear,day,week,hour,minute,second,比如明天dateadd(day,1, getdate())

25.     datediff(datepart,date1,date2). datapart和上面一樣。整個函數(shù)結果是date2 - date1

26.     datename(datepart, date) 取那一部分,返回字符串。

27.     datepart(datepart, date) 取一部分,返回整數(shù)。

28.     getdate()當前時間

最后一個,排序問題:

我測試程序的時候,發(fā)現(xiàn)剛開始中文的顯示是正常的,后來我更新的時候,讀取出來的正常的中文馬上就變成問號了,而且是數(shù)據(jù)庫記錄里邊的填充的數(shù)據(jù)直接變成問題那種類型。這種現(xiàn)象是由于數(shù)據(jù)庫排序規(guī)則(Collation)指定錯誤造成的,要正確的將中文寫入NVARCHAR字段,要么在SQL語句中文值前加NN'中文值'),要么要確定數(shù)據(jù)庫排序規(guī)則為Chinese_PRC。于是我再新建一個數(shù)據(jù)庫,將排序規(guī)則定為chinses_ci_ai這個,然后再導入數(shù)據(jù)。這樣問題就解決了。

PS:什么叫排序規(guī)則呢?MS是這樣描述的:" Microsoft SQL Server 2000 中,

字符串的物理存儲由排序規(guī)則控制。排序規(guī)則指定表示每個字符的位模式以及存

儲和比較字符所使用的規(guī)則。"

  在查詢分析器內執(zhí)行下面語句,可以得到SQL SERVER支持的所有排序規(guī)則。

    select * from ::fn_helpcollations()

排序規(guī)則名稱由兩部份構成,前半部份是指本排序規(guī)則所支持的字符集。

如:

  Chinese_PRC_CS_AI_WS

前半部份:指UNICODE字符集,Chinese_PRC_指針對大陸簡體字UNICODE的排序規(guī)則。

排序規(guī)則的后半部份即后綴 含義:

  _BIN 二進制排序

  _CI(CS) 是否區(qū)分大小寫,CI不區(qū)分,CS區(qū)分

  _AI(AS) 是否區(qū)分重音,AI不區(qū)分,AS區(qū)分   

  _KI(KS) 是否區(qū)分假名類型,KI不區(qū)分,KS區(qū)分 

    _WI(WS) 是否區(qū)分寬度 WI不區(qū)分,WS區(qū)分 

區(qū)分大小寫:如果想讓比較將大寫字母和小寫字母視為不等,請選擇該選項。

區(qū)分重音:如果想讓比較將重音和非重音字母視為不等,請選擇該選項。如果選擇該選項,

         比較還將重音不同的字母視為不等。

區(qū)分假名:如果想讓比較將片假名和平假名日語音節(jié)視為不等,請選擇該選項。

區(qū)分寬度:如果想讓比較將半角字符和全角字符視為不等,請選擇該選項

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多