解析Access與Sql Server之ASP代碼比較(5)_Access數據庫教程
推薦:解析ACCESS作為網站數據庫的弊端現在網上絕大多數網站都是ACCESS+ASP的形式,因為ACCESS結構簡單容易處理,而且也能滿足多數的網站程序要求。 ACCESS是小型數據庫,既然是小型就有他根本的局限性,以下幾種情況下數據庫基本上會吃不消: 1。數據庫過大,一般ACCESS數據庫達到50M左右的時候
smallmoney(smallmoney數據類型:Access項目中的一種存儲貨幣值的數據類型,取值范圍從-214,748.3648到214,748.3647,精確度為萬分之一個貨幣單位。當顯示smallmoney值時,會將它們四舍五入為兩個小數位。)
小數/數值(decimal數據類型(Access數據庫):精確的數值數據類型,用于存儲-10^38-1到10^38-1的值。可以指定數值范圍(最大總位數)和精度(小數點右邊的最大位數)。)decimal(decimal數據類型(Access項目):精確的數值數據類型,用于存儲-10^38-1到10^38-1的值。可以指定數值范圍(最大總位數)和精度(小數點右邊的最大位數)。)
numeric(numeric數據類型:在Access項目中,一種精確的數值數據類型,取值從-10^38-1到10^38-1。可以指定數值范圍(最大總位數)和精度(小數點右邊的最大位數)。)
日期/時間(“日期/時間”數據類型:Access數據庫的一種數據類型,用來存放日期和時間信息。)datetime(datetime數據類型:在Access項目中,日期和時間的數據類型,范圍從1753年1月1日到9999年12月31日,精確度為三百分之一秒,即3.33毫秒。)
smalldatetime(smalldatetime數據類型:Access項目中的一種日期和時間數據類型,精度不如datetime時間數據類型。數據取值范圍從1900年1月1日到2079年6月6日,精確度為一分鐘。)
自動編號(“自動編號”數據類型:MicrosoftAccess數據庫中的一種字段數據類型,當向表中添加一條新記錄時,這種數據類型會自動為每條記錄存儲一個唯一的編號。可以產生三種編號:順序號、隨機號和同步復制ID。)(遞增)int(int數據類型:Access項目中的一種4字節(32位)數據類型,存儲位于-2^31(-2,147,483,648)與2^31-1(2,147,483,647)之間的數字。)(定義了Identity屬性)
文本(“文本”數據類型:MicrosoftAccess數據庫中的一種字段數據類型。“文本”數據類型最多可以包含255個字符,或者是由FieldSize屬性指定的一個小一些的字符數。)(n)varchar(n)(varchar(n)數據類型:Access項目中的一種可變長度的數據類型,最大長度為8,000個ANSI字符。)
nvarchar(n)(nvarchar(n)數據類型:在Access項目中,一種可變長度的數據類型,最多可含4,000個Unicode字符。Unicode字符每字符占兩個字節,而且支持所有國際字符。)
備注(“備注”數據類型:在MicrosoftAccess數據庫中的一種字段數據類型。“備注”字段最多可以包含65,535個字符。)text(text數據類型:Access項目中的一種長度可變的數據類型,最多可存儲2^31-1(2,147,483,647)個字符;默認長度為16。)
OLE對象(“OLE對象”數據類型:字段的數據類型之一,用于在其他應用程序中創建的、可鏈接或嵌入(插入)到Access數據庫中的對象。)image(image數據類型:在Access項目中,一種長度可變的數據類型,最多可存儲2^31-1(2,147,483,647)字節的二進制數據。image數據類型用來存儲BLOB(二進制大對象),如圖片、文檔、聲音和已編譯代碼。)
同步復制ID(又名全局唯一標識符(GUID:在Access數據庫中,一種用于建立同步復制唯一標識符的16字節字段。GUID用于標識副本、副本集、表、記錄和其他對象。在Access數據庫中,GUID是指同步復制ID。)(GUID))uniqueidentifier(uniqueidentifier數據類型:在Access項目中,16字節的全局唯一標識符(GUID)。)(僅適于SQLServer7.0或更高版本)
超鏈接(“超鏈接”數據類型:存儲超鏈接地址的Access數據庫字段的數據類型。地址最多可以包含四部分,用以下語法格式編寫:displaytext#address#subaddress#。)char(char數據類型:在Access項目中,一種固定長度的數據類型,最多可含8,000個ANSI字符。),
nchar(nchar數據類型:在Access項目中,一種固定長度的數據類型,最多可含4,000個Unicode字符。Unicode字符每字符占兩個字節,而且支持所有國際字符。),varchar,nvarchar(Hyperlink屬性設為Yes)
(無等價的數據類型)varbinary(varbinary數據類型:Access項目中的一種可變長度的數據類型,最多可存儲8,000字節的二進制數據。)
(無等價的數據類型)smallint(smallint數據類型:Access項目中的一種2字節(16位)數據類型,存儲位于-2^15(-32,768)與2^15-1(32,767)之間的數字。)
(無等價的數據類型)timestamp(timestamp數據類型:在Access項目中,一種每插入或更新一行就會自動更新的數據類型。timestamp列中的值不是datetime數據,而是binary(8)或varbinary(8),標明了數據修改的順序。)
(無等價的數據類型)charnchar
(無等價的數據類型)sql_variant(sql_variant數據類型:Access項目中的一種數據類型,存儲除text、ntext、image、timestamp和sql_variant類型以外的多種數據類型的值。在列、參數、變量或用戶定義函數的返回值中使用。)
(無等價的數據類型)用戶定義(用戶定義的數據類型:在MicrosoftSQLServer數據庫中,允許某列包含的數據的類型定義,由用戶利用現有的系統數據類型定義。規則和默認值僅可以綁定到用戶定義的數據類型。)
注釋在Access項目或SQLServer數據庫中,前綴“n”代表“國家/地區”,意思是這個數據類型是啟用Unicode的。在Access數據庫中,全部文本列在默認情況下都是啟用Unicode的。
ACCESS轉SQL需要注意的問題
2006-2-13 16:01:20
很多朋友想用SQL2000數據庫的編程方法,但是卻又苦于自己是學ACCESS的,對SQL只是一點點的了解而已,這里我給大家提供以下參考---將ACCESS轉化成SQL2000的方法和注意事項
一,首先,我說的是在ACCESS2000,SQL2000之間轉換,其他的我也還沒有嘗試過,希望大家多多試驗,肯定是有辦法的;
二,轉換的方法
1,打開”控制面板“下”管理工具“中的”數據庫源“;
2,按”添加“添加一個新的數據源,在選擇欄里選”DriverdomicrosoftAccess
(*.mdb)”,完成后將出現一個框,
在”數據庫源“里面輸入你想寫的名稱,我取名叫“ABC”,說明不需要填,接著,按下面的選擇,尋找你的數據庫地址和選中(注意,請先備份自己的ACCESS數據庫),然后確定。
數據源在這里建好了,剩下轉換了。
3,打開SQL2000企業管理器,進入數據庫,新建一個空的數據庫“ABC”;
4,選擇新建立的數據庫,按鼠標右鍵,選擇“所有任務”下“導入數據”,按“下一步”繼續;
5,在數據庫源下拉但中選擇”DriverdomicrosoftAccess(*.mdb)“,在”用戶/系統DSN“中,選種你剛才添加的”ABC“,按”下一步“;
6,“目的”不需要修改,選擇服務器(一般下為自己的本機"local",也可以選擇服務器地址或者局域網地址,確定你的權限是否可以操作,),"使用WINDOWS身份驗證"指用自己的系統管理員身份操作,"使用SQL身份操作驗證"可以用于網站的操作,推薦用后者;
7,選上"使用SQL身份操作驗證"后,填寫你的用戶名和密碼,我自己選擇的是系統默認號碼"sa","****",數據庫選擇剛新建的"ABC",按"下一步";
8,這一步的兩個單項選擇,"從數據源復制表和視圖"與"用一條查詢指令指定要傳輸的數據",選擇前者,按"下一步"繼續;
9,這里將出現你自己ACCESS數據庫的表,按"全選"后,下一步;
10,"DTS導入/導出向導",看"立即運行"被選中按"下一步",
11,按"完成"繼續;
12,這個步驟你將看到你的數據被導入SQL2000里面,當出現"已經成功把XXX個表導入到數據庫"的字樣,而且所有的表前面都有綠色的勾,就表示成功導入所有數據,如果中途出現問題或者表前面有紅色的*的話,說明該表沒有成功導入,這時就要回去查看自己的操作是否正確了.
三,數據修改
1,由于SQL2000里面沒有"自動編號",所以你的以"自動編號"設置的字段都會變成非空的字段,這就必須手工修改這些字段,并把他的"標示"選擇"是",種子為"1",增量為"1",
2,另外,ACCESS2000轉換成SQL2000后,原來屬性為"是/否"的字段將被轉換成非空的"bit",這時候你必須修改成自己想要的屬性了;
3,另外,大家要注意對時間函數的把握.ACCESS與SQL是有很多不同的.
四、相關的字段問題
1.ACCESS的數據庫中的自動編號類型在轉化時,sqlserver并沒有將它設為自動編號型,我們需在SQL創建語句中加上identity,表示自動編號!
2.轉化時,跟日期有關的字段,SQLSERVER默認為smalldatetime型,我們最好將它變為datetime型,因為datetime型的范圍比smalldatetime型大。我遇見這種情況,用smalldatetime型時,轉化失敗,而用datetime型時,轉化成功。
3.對此兩種數據庫進行操作的sql語句不全相同,例如:在對ACCESS數據庫進行刪除紀錄時用:"delete*fromuserwhereid=10",而對SQLSERVER數據庫進行刪除是用:"deleteuserwhereid=10".
4.日期函數不相同,在對ACCESS數據庫處理中,可用date()、time()等函數,但對SQLSERVER數據庫處理中,只能用datediff,dateadd等函數,而不能用date()、time()等函數。
5.在對ACCESS數據庫處理中,sql語句中直接可以用一些VB的函數,像cstr()函數,而對SQLSERVER數據庫處理中,卻不能用。
五、相關語句問題
自動增加字段需要重寫。在access中經常使用的自動編號字段,導入到mssql后,他并不是自增型的int,需要手工設置,把導入后的自動編號字段的標識的“否”改為“是”,“種子”和“遞增量”都為“1”,才能成為自動編號
所有的默認值都丟失了。主要是數字類型和日期類型
所有now(),time(),date()要改成getdate()
所有datediff('d',time1,time2)要改成datediff(day,time1,time2)
所有datediff('ww',time1,time2)要改成datediff(week,time1,time2)
所有datediff('d',time1,time2)要改成datediff(day,time1,time2)
在mssqlserver中,有許多保留字,在access中是沒有的,當你把數據導入到mssql的時候,問題就出來了。mssql在導入的時候,會自動給這些字段(包括數據庫中的表名)加上“[字段名]”,因此,你必須修改你的腳本,把相應的字段名字(或者表名字)加上中括號,或改變字段名字為不是mssql的保留字,在用access關于時間的使用,大家喜歡使用“select*fromaaaawhiletime="&now()”這樣的sql語句,然而,在mssql中沒有“now()”這個函數,而是使用“getdate()”,所以,所有的sql語句中的“now()”必須換成“getdate()”。
日期函數不相同,在對ACCESS數據庫處理中,可用date()、time()等函數,但對SQLSERVER數據庫處理中,只能用datediff,dateadd等函數,而不能用date()、time()等函數。轉化時,跟日期有關的字段,SQLSERVER默認為smalldatetime型,我們最好將它變為datetime型。
分享:揭秘Access數據庫過大問題的幾種解決方案問題: 1、我的Access數據庫里面沒存多少數據,為什么體積很大,別人和我存一樣的數據為什么只有我的文件體積的1/10。 2、為什么我刪除了數據,但是數據庫體積沒有減小? 3、為什么我存了幾張圖片到ole字段里面數據庫體積就變大,而且變大的速度超過圖片的總
。