一、怎么向VFP數(shù)據(jù)表中一次加入多條記錄
以下均以SQL2000、VFP6及以上的表為例
代碼導(dǎo)入:查詢分析器中執(zhí)行如下語句(先選擇對應(yīng)的數(shù)據(jù)庫)
————-如果接受導(dǎo)入數(shù)據(jù)的SQL表已存在
–如果接受導(dǎo)入數(shù)據(jù)的SQL表已經(jīng)存在
Insert Into 已經(jīng)存在的SQL表名 Select * From openrowset(‘MSDASQL’,’Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:’,’select * from aa.DBF’)
–也可以對應(yīng)列名進(jìn)行導(dǎo)入,如:
Insert Into 已經(jīng)存在的SQL表名 (列名1,列名2…) Select (對應(yīng)列名1,對應(yīng)列名2…) From openrowset(‘MSDASQL’,’Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:’,’select * from aa.DBF’)
————-如果接受導(dǎo)入數(shù)據(jù)的SQL表不存在,導(dǎo)入時創(chuàng)建
–方法一:有一個缺點(diǎn):把DBF表導(dǎo)入SQL Server中后,馬上用VISUAL FOXPRO打開DBF表,會提示“不能存取文件”,即這個表還被SQL打開著呢。可是過了1分鐘左右,再打開DBF表就可以了,說明經(jīng)過一段時間后查詢分析器才把這個表關(guān)閉。
Select * Into 要生成的SQL表名 From openrowset(‘MSDASQL’,’Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:’,’select * from dbf表名.DBF’)
–需要安裝Visual FoxPro ODBC Driver(驅(qū)動下載:http://msdn2.microsoft.com/zh-cn/vfoxpro/Bb190233.aspx)
–方法二:有一個缺點(diǎn):把DBF表導(dǎo)入SQL Server中后,馬上用VISUAL FOXPRO打開DBF表,會提示“不能存取文件”,即這個表還被SQL打開著呢??墒沁^了1分鐘左右,再打開DBF表就可以了,說明經(jīng)過一段時間后查詢分析器才把這個表關(guān)閉。
Select * Into TEMP1 From openrowset(‘VFPOLEDB.1′,’C:’;’admin’;” ,’select * from dbf表名.DBF’)
–如果沒有安裝VFP,需要把vfpoledb.dll拷貝到SYSTEM目錄下,并注冊。
–方法三:導(dǎo)入SQL SERVER后,源表再用VFP打開就不提示“不能存取文件”,說明語句執(zhí)行后就把源表關(guān)閉了。不過也有不盡人意的地方,就是用前兩種方式導(dǎo)入后,源表中的字符型字段導(dǎo)入后SQL表字段對應(yīng)變成NVARCHAR了。
Select * Into 要生成的SQL表名 From OPENROWSET(‘MICROSOFT.JET.OLEDB.4.0′,’dBase IV;HDR=NO;IMEX=2;DATABASE=c:’,’select * from dbf表名.dbf’)
–方法四:導(dǎo)入SQL SERVER后,源表再用VFP打開就不提示“不能存取文件”,說明語句執(zhí)行后就把源表關(guān)閉了。不過也有不盡人意的地方,就是用前兩種方式導(dǎo)入后,源表中的字符型字段導(dǎo)入后SQL表字段對應(yīng)變成NVARCHAR了。
Select * Into 要生成的SQL表名 From OPENROWSET(‘MICROSOFT.JET.OLEDB.4.0′,’dBase III;HDR=NO;IMEX=2;DATABASE=c:’,’select * from dbf表名.dbf’)
–方法五:用BDE驅(qū)動導(dǎo)入時,再用VFP打開源表時不會提示“不能存取文件”,不過有點(diǎn)問題:就是有時整型數(shù)據(jù)導(dǎo)入后變?yōu)樨?fù)數(shù)了。
Select * From OPENROWSET(‘MSDASQL’,’CollatingSequence=ASCII;DBQ=D:SEND;DefaultDir=D:SEND;Deleted=0;Driver={Driver do Microsoft dBase (*.dbf)};FIL=dBase 5.0′,’select * from dbf表名.DBF’) A
–前提:先在機(jī)器上安裝BDE的驅(qū)動
–也可以只導(dǎo)幾個字段
Select * Into 要生成的SQL表名 From openrowset(‘MSDASQL’,’Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:’,’select 字段1,字段2 from aa.DBF’)
/*說明:
SourceDB=c: c:是dbf文件的存放目錄
aa.Dbf 是dbf文件名
*/
延伸閱讀:
二、行式數(shù)據(jù)庫與列式數(shù)據(jù)庫應(yīng)用場景
行式更適合OLTP,比如傳統(tǒng)的基于增刪改查操作的應(yīng)用。列式更適合OLAP,非常適合于在數(shù)據(jù)倉庫領(lǐng)域發(fā)揮作用,比如數(shù)據(jù)分析、海量存儲和商業(yè)智能;涉及不經(jīng)常更新的數(shù)據(jù)。
由于設(shè)計上的不同,列式數(shù)據(jù)庫在并行查詢處理和壓縮上更有優(yōu)勢。而且數(shù)據(jù)是以列為單元存儲,完全不用考慮數(shù)據(jù)建?;蛘哒f建模更簡單了。要查詢計算哪些列上的數(shù)據(jù),直接讀取列就行。
最后我們需要務(wù)實的指出,沒有使用廣泛的數(shù)據(jù)庫,列式數(shù)據(jù)庫也并非使用廣泛,只不過給DBA提供了更多的選擇,DBA需根據(jù)自己的應(yīng)用場景自行選擇。