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