當前位置:首頁 » 編程語言 » 做sql解析器
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

做sql解析器

發布時間: 2022-10-03 05:59:03

Ⅰ 如何對變異的sql語句做解析處理

優化SQL查詢:如何寫出高性能SQL語句1、首先要搞明白什麼叫執行計劃?執行計劃是資料庫根據SQL語句和相關表的統計信息作出的一個查詢方案,這個方案是由查詢優化器自動分析產生欀如一條SQL語句如果用來從一個10萬條記錄的表中查1條記錄,那查詢優化器會選擇「索引查找」方式,如果該表進行了歸檔,當前只剩下5000條記錄了,那查詢優化器就會改變方案,採用「全表掃描」方式。可見,執行計劃並不是固定的,它是「個性化的」。產生一個正確的「執行計劃」有兩點很重要:(1)SQL語句是否清晰地告訴查詢優化器它想干什麼?(2)查詢優化器得到的資料庫統計信息是否是最新的、正確的?2、統一SQL語句的寫法對於以下兩句SQL語句,程序員認為是相同的,資料庫查詢優化器認為是不同的。select*fromalselect*Fromal其實就是大小寫不同,查詢分析器就認為是兩句不同的SQL語句,必須進行兩次解析。生成2個執行計劃。所以作為程序員,應該保證相同的查詢語句在任何地方都一致,多一個空格都不行!3、不要把SQL語句寫得太復雜我經常看到,從資料庫中捕捉到的一條SQL語句列印出來有2張A4紙這么長。一般來說這么復雜的語句通常都是有問題的。我拿著這2頁長的SQL語句去請教原作者,結果他說時間太長,他一時也看不懂了。可想而知,連原作者都有可能看糊塗的SQL語句,資料庫也一樣會看糊塗。一般,將一個Select語句的結果作為子集,然後從該子集中再進行查詢,這種一層嵌套語句還是比較常見的,但是根據經驗,超過3層嵌套,查詢優化器就很容易給出錯誤的執行計劃。因為它被繞暈了。像這種類似人工智慧的東西,終究比人的分辨力要差些,如果人都看暈了,我可以保證資料庫也會暈的。另外,執行計劃是可以被重用的,越簡單的SQL語句被重用的可能性越高。而復雜的SQL語句只要有一個字元發生變化就必須重新解析,然後再把這一大堆垃圾塞在內存里。可想而知,資料庫的效率會何等低下。4、使用「臨時表」暫存中間結果簡化SQL語句的重要方法就是採用臨時表暫存中間結果,但是,臨時表的好處遠遠不止這些,將臨時結果暫存在臨時表,後面的查詢就在tempdb中了,這可以避免程序中多次掃描主表,也大大減少了程序執行中「共享鎖」阻塞「更新鎖」,減少了阻塞,提高了並發性能。5、OLTP系統SQL語句必須採用綁定變數select*>』2010-10-2000:00:01′select*>』2010-09-2200:00:01′以上兩句語句,查詢優化器認為是不同的SQL語句,需要解析兩次。如果採用綁定變數select*>@chgtime@chgtime變數可以傳入任何值,這樣大量的類似查詢可以重用該執行計劃了,這可以大大降低資料庫解析SQL語句的負擔。一次解析,多次重用,是提高資料庫效率的原則。6、綁定變數窺測事物都存在兩面性,綁定變數對大多數OLTP處理是適用的,但是也有例外。比如在where條件中的欄位是「傾斜欄位」的時候。「傾斜欄位」指該列中的絕大多數的值都是相同的,一張人口調查表,其中「民族」這列,90%以上都是漢族。那麼如果一個SQL語句要查詢30歲的漢族人口有多少,那「民族」這列必然要被放在where條件中。這個時候如果採用綁定變數@nation會存在很大問題。試想如果@nation傳入的第一個值是「漢族」,那整個執行計劃必然會選擇表掃描。然後,第二個值傳入的是「布依族」,按理說「布依族」占的比例可能只有萬分之一,應該採用索引查找。但是,由於重用了第一次解析的「漢族」的那個執行計劃,那麼第二次也將採用表掃描方式。這個問題就是著名的「綁定變數窺測」,建議對於「傾斜欄位」不要採用綁定變數。7、只在必要的情況下才使用begintranSQLServer中一句SQL語句默認就是一個事務,在該語句執行完成後也是默認commit的。其實,這就是begintran的一個最小化的形式,好比在每句語句開頭隱含了一個begintran,結束時隱含了一個commit。有些情況下,我們需要顯式聲明begintran,比如做「插、刪、改」操作需要同時修改幾個表,要求要麼幾個表都修改成功,要麼都不成功。begintran可以起到這樣的作用,它可以把若干SQL語句套在一起執行,最後再一起commit。好處是保證了數據的一致性,但任何事情都不是完美無缺的。Begintran付出的代價是在提交之前,所有SQL語句鎖住的資源都不能釋放,直到commit掉。可見,如果Begintran套住的SQL語句太多,那資料庫的性能就糟糕了。在該大事務提交之前,必然會阻塞別的語句,造成block很多。Begintran使用的原則是,在保證數據一致性的前提下,begintran套住的SQL語句越少越好!有些情況下可以採用觸發器同步數據,不一定要用begintran。8、一些SQL查詢語句應加上nolock在SQL語句中加nolock是提高SQLServer並發性能的重要手段,在oracle中並不需要這樣做,因為oracle的結構更為合理,有undo表空間保存「數據前影」,該數據如果在修改中還未commit,那麼你讀到的是它修改之前的副本,該副本放在undo表空間中。這樣,oracle的讀、寫可以做到互不影響,這也是oracle廣受稱贊的地方。SQLServer的讀、寫是會相互阻塞的,為了提高並發性能,對於一些查詢,可以加上nolock,這樣讀的時候可以允許寫,但缺點是可能讀到未提交的臟數據。使用nolock有3條原則。(1)查詢的結果用於「插、刪、改」的不能加nolock!(2)查詢的表屬於頻繁發生頁分裂的,慎用nolock!(3)使用臨時表一樣可以保存「數據前影」,起到類似oracle的undo表空間的功能,能採用臨時表提高並發性能的,不要用nolock。9、聚集索引沒有建在表的順序欄位上,該表容易發生頁分裂比如訂單表,有訂單編號orderid,也有客戶編號contactid,那麼聚集索引應該加在哪個欄位上呢?對於該表,訂單編號是順序添加的,如果在orderid上加聚集索引,新增的行都是添加在末尾,這樣不容易經常產生頁分裂。然而,由於大多數查詢都是根據客戶編號來查的,因此,將聚集索引加在contactid上才有意義。而contactid對於訂單表而言,並非順序欄位。比如「張三」的「contactid」是001,那麼「張三」的訂單信息必須都放在這張表的第一個數據頁上,如果今天「張三」新下了一個訂單,那該訂單信息不能放在表的最後一頁,而是第一頁!如果第一頁放滿了呢?很抱歉,該表所有數據都要往後移動為這條記錄騰地方。SQLServer的索引和Oracle的索引是不同的,SQLServer的聚集索引實際上是對表按照聚集索引欄位的順序進行了排序,相當於oracle的索引組織表。SQLServer的聚集索引就是表本身的一種組織形式,所以它的效率是非常高的。也正因為此,插入一條記錄,它的位置不是隨便放的,而是要按照順序放在該放的數據頁,如果那個數據頁沒有空間了,就引起了頁分裂。所以很顯然,聚集索引沒有建在表的順序欄位上,該表容易發生頁分裂。曾經碰到過一個情況,一位哥們的某張表重建索引後,插入的效率大幅下降了。估計情況大概是這樣的。該表的聚集索引可能沒有建在表的順序欄位上,該表經常被歸檔,所以該表的數據是以一種稀疏狀態存在的。比如張三下過20張訂單,而最近3個月的訂單只有5張,歸檔策略是保留3個月數據,那麼張三過去的15張訂單已經被歸檔,留下15個空位,可以在insert發生時重新被利用。在這種情況下由於有空位可以利用,就不會發生頁分裂。但是查詢性能會比較低,因為查詢時必須掃描那些沒有數據的空位。重建聚集索引後情況改變了,因為重建聚集索引就是把表中的數據重新排列一遍,原來的空位沒有了,而頁的填充率又很高,插入數據經常要發生頁分裂,所以性能大幅下降。對於聚集索引沒有建在順序欄位上的表,是否要給與比較低的頁填充率?是否要避免重建聚集索引?是一個值得考慮的問題!10、加nolock後查詢經常發生頁分裂的表,容易產生跳讀或重復讀加nolock後可以在「插、刪、改」的同時進行查詢,但是由於同時發生「插、刪、改」,在某些情況下,一旦該數據頁滿了,那麼頁分裂不可避免,而此時nolock的查詢正在發生,比如在第100頁已經讀過的記錄,可能會因為頁分裂而分到第101頁,這有可能使得nolock查詢在讀101頁時重復讀到該條數據,產生「重復讀」。同理,如果在100頁上的數據還沒被讀到就分到99頁去了,那nolock查詢有可能會漏過該記錄,產生「跳讀」。上面提到的哥們,在加了nolock後一些操作出現報錯,估計有可能因為nolock查詢產生了重復讀,2條相同的記錄去插入別的表,當然會發生主鍵沖突。11、使用like進行模糊查詢時應注意有的時候會需要進行一些模糊查詢比如select*fromcontactwhereusernamelike『%yue%』關鍵詞%yue%,由於yue前面用到了「%」,因此該查詢必然走全表掃描,除非必要,否則不要在關鍵詞前加%,12、數據類型的隱式轉換對查詢效率的影響sqlserver2000的資料庫一的程序在提交sql語句的時候,沒有使用強類型提交這個欄位的值,由sqlserver2000自動轉換數據類型,會導致傳入的參數與主鍵欄位類型不一致,這個時候sqlserver2000可能就會使用全表掃描。Sql2005上沒有發現這種問題,但是還是應該注意一下。13、SQLServer表連接的三種方式(1)MergeJoin(2)NestedLoopJoin(3)HashJoinSQLServer2000隻有一種join方式——NestedLoopJoin,如果A結果集較小,那就默認作為外表,A中每條記錄都要去B中掃描一遍,實際掃過的行數相當於A結果集行數xB結果集行數。所以如果兩個結果集都很大,那Join的結果很糟糕。SQLServer2005新增了MergeJoin,如果A表和B表的連接欄位正好是聚集索引所在欄位,那麼表的順序已經排好,只要兩邊拼上去就行了,這種join的開銷相當於A表的結果集行數加上B表的結果集行數,一個是加,一個是乘,可見mergejoin的效果要比NestedLoopJoin好多了。如果連接的欄位上沒有索引,那SQL2000的效率是相當低的,而SQL2005提供了Hashjoin,相當於臨時給A,B表的結果集加上索引,因此SQL2005的效率比SQL2000有很大提高,我認為,這是一個重要的原因。總結一下,在表連接時要注意以下幾點:(1)連接欄位盡量選擇聚集索引所在的欄位(2)仔細考慮where條件,盡量減小A、B表的結果集(3)如果很多join的連接欄位都缺少索引,而你還在用SQLServer2000,趕緊升級吧。

Ⅱ sql查詢分析器是什麼

在這個對話框里,您可以指定資料庫伺服器的修復設置,以及原始安裝的數據文件的位置。要讓這一過程更容易和更快,就要把x86目錄從SQL的光碟上復制到硬碟上,並把指向改到本地的副本。一旦驗證完了所有的信息,點擊「重建(Rebuild)」。然後系統就會提示您確認操作,如圖C所示。

圖C
點擊「確定(Yes)」。一旦重建過程完成,您會看到一條重建成功的消息。您現在就有了一個全新的主資料庫,准備好修復主資料庫了。

首先,打開命令行提示符,輸入Program FilesMicrosoft SQL ServerMssqlBINN目錄下的SQLservr.exe –c –m命令,啟動單用戶模式下的SQL Server。結果如圖D所示。

圖D
在單用戶模式下啟動SQL Server之後,您可以利用備份文件修復主資料庫。您可以用「查詢分析器(Query Analyzer)」或者「SQL企業管理器(SQL EntERPrise Manager)」來修復它。如果使用查詢分析器,您就要像圖E一樣運行查詢。

圖E
如果使用企業伺服器,就要右擊主資料庫,選擇「所有任務|修復資料庫(All Tasks | Restore Database)」,瀏覽到您設備所在的位置。點擊兩次「OK」,您就可以成功地修復主資料庫了。修復完主資料庫,退出單用戶模式,在正常的操作模式下重新啟動SQL Server。

如果由於某種原因您的修復操作無法成功完成,那麼您可以試試別的方法。只用簡單地重建主資料庫並添加駐留在數據目錄下的所有資料庫就可以了。您可以用企業管理器或者查詢分析器來添加資料庫。在企業管理器里,右擊「資料庫 (Databases)」,選擇「添加資料庫(Attach Database)」,在查詢分析器里,用示例腳本就能夠添加您的資料庫了。

結束語

既然已經知道了如何在碰到災難的情況下成功地重建主資料庫,那麼您可以把這些技術增加到災難修復預案中去。這樣的話,您就不用再在SQL Server的主資料庫崩潰導致資料庫伺服器停止工作的情況下不知所措了。

Ⅲ 如果要做sql的一個解析器,已經生成ast了,接下來要怎麼做

如果要做sql的一個解析器,已經生成ast了,接下來要怎麼做
如果題主對資料庫基本沒有系統性了解的話,去看《資料庫系統概念》,什麼都說完了,除了實現細節以外。通常來講,AST做完當然是要做查詢計劃的優化了。但是如果你存儲引擎還沒寫,我不知道你要怎麼測試。

Ⅳ sql查詢分析器怎麼用

查詢分析器左邊的對象資源管理器,右鍵可以創建對象(不需要寫代碼),查看用戶對象和系統對象,可以創建腳本,可以執行任務(分離,離線,備份,還原資料庫等等)。
而查詢分析窗口可以寫入SQL資料庫支持的各種SQL語句,T-SQL語句,嵌入式編程語句來執行數據定義、數據操縱、數據查詢、數據控制等語句,創建修改刪除資料庫對象(表,視圖,索引,觸發器)。窗口上面有分析和執行按鈕,可以分析語句,執行語句。
窗口下面還顯示語句執行結果,以及系統提示等等。

自己多摸索就好了。

網路的資料庫真遲鈍,答案都採納了,我這還能提交,坑爹…

Ⅳ 如何破解general sql parser

首先這個工具是商業收費的,而且價格不菲。但是他提供了90天的實驗版本供大家下載試用。
Java版本的下載地址:
http://www.sqlparser.com/dlaction.php?fid=gspjava&ftitle=General%20SQL%20Parser%20Java%20version
下載解壓後,demos是一些實例,javadoc是Java幫助文檔,還有UserGuide幫助手冊,最重要的gsp.jar就是我們要build path到工程中的jar包了。

實例
下面我們寫幾個實例
一、檢查語法
我們先講講下面的代碼做了哪些事:
1. 定義一個簡單的create語句(我們故意把name1的類型錯誤的設置成varchar2)
2. 創建一個MySQL解析器實例

Ⅵ sql查詢分析器是什麼

SQL查詢分析器,是SQL Server的一個資料庫管理工具,可以對資料庫進行,數據檢索、伺服器設置等等。

如何配置使用微軟SQL Server 數據分析工具

本系列文章分兩部分,本文是第二部分(第一部分參見:你的數據有多干凈?)。我們將以測試體驗的方式了解微軟SQL Server提供的數據分析工具。

其它一些外部分析工具具有更豐富的功能,但是SQL Server授權允許你免費就可以使用這款低調的分析工具。

接下來讓我們通過分析「AdventureWorksLT 」資料庫中的一些數據來了解這款工具。

在此之前,你需要先安裝好SQL Server集成服務,以及與SQL Server捆綁的Visual Studio精簡版。在SQL Server 2012中,叫做「SQL Server Data Tools」;而在SQL Server 2008中,名稱叫做「Business Intelligence Development Studio」。

如果你缺少這些組件,你可以運行SQL Server安裝程序並勾選相關組件,操作很簡單。

配置分析工具

不管你啟動哪個Visual Studio工作環境,都要創建一個集成服務項目。然後,從SSIS工具箱中拖拽一個數據分析任務到設計面板上,然後雙擊開始配置。

配置結果信息存儲在XML文件中,所以需要指定保存文件的名稱和路徑。

點擊目標旁邊的空白框,會出現一個箭頭。

點擊箭頭,然後點擊「New File connection」。

在結果框中,指定路徑和文件名(包括.xml後綴)。

點擊「確定」按鈕,然後點擊「Quick Profile」按鈕。

點擊「ADO.NET Connection」旁邊的「新建」按鈕。

在出現的對話框中,指定SQL Server和託管待分析數據的資料庫(我使用的是「AdventureWorksLT2012 」資料庫),然後點擊「確定」按鈕。

點擊表或視圖下拉框,選擇待分析數據(我選用的是「SalesLT.Proct」)。

保留默認勾選的復選框,然後點擊「確定」按鈕。確定後就會回到主設計界面。

最後,按「F5」就可以開始分析了。

分析成功,在SQL Server 2008中會有一個綠色小框來顯示,在SQL Server 2012中是個綠色小勾。如果你看到紅色小框或者紅叉,那麼可以在「Progress 」標簽頁找到哪裡出錯了。

查看結果

假設你看到的是綠色(在集成服務中每個人都喜歡這個顏色),那麼接下來啟動「Data Profile Viewer」應用程序。在開始菜單中,它在「Microsoft SQL Server XXXX」文件夾的集成服務子文件夾下。

在查看器中,點擊「打開」按鈕,找到你之前配置的xml文件。你現在可以看到分析結果了。

「adventureWorks」庫中的數據本來是乾乾凈凈的,所以我做了一些修改,你自己直接做的話看到的分析結果會不一樣。

在查看器左側面板中,你可以看到我們選擇的表,它下面是數據分析的五個不同方面(也就是我們配置任務時默認選中的五項)。

點擊「Candidate Key Profiles 」,就會在右側面板中顯示結果。

該信息展示了值的唯一性,你可以看看我的數據(修改過的),「名稱」列包含的數據不是百分之百唯一的。

我可以點擊「名稱」列來查看更多,界面中「 Key Violations 」部分下面會顯示更多信息。

錯誤的產品是「HL Road Frame – Black, 58」,問題是有兩行有相同的名稱(產品名稱通常應該是唯一的)。

在「 Key Violations 」中的問題產品上點擊,就會顯示出需要關注的行。

在左側面板中(+微信關注網路世界),點擊「Column Length Distribution Profiles」。

功能正如其名,這個頁面會分析每個列值的長度。

我這里顯示的結果,「顏色」列包含列最小長度是2。

就像我們前面例子中所做的那樣,我們可以向下鑽取,我可以看到那些值的分布,進一步鑽取我可以看到臟數據對應的實際行。

其它類型的分析操作都是類似的。

「Column NULL Ratio Profiles」顯示了某一列中「NULL」值的百分比。

如果你有些列實際上不允許為「NULL」,例如「Proct Name」,那麼這個功能就非常有用。

「Column Statistics Profiles 」顯示了日期和數值的最小值、最大值、平均值以及標准偏差。對於識別「327歲的員工」與「價格為負數的產品」這類不合理數據非常有幫助。

「Column Value Distribution Profiles 」顯示某一列中有多少不同的值。這對於處理像「性別」這種列是很有用的,你可能預期該列只有兩個不同值,但是卻找到了15個,很容易發現問題。

還有另外兩個分析功能也是可用的,不過默認沒有啟用。

其中一個就是「Functional Dependency Profile 」,它可以找到那些依賴於其它列值得列。

這一條功能對於檢查地址信息時很有用;例如,我們希望相同城市的地址共用相同的郵政編碼。

總結

該分析工具的局限性在於,源數據必須存儲在SQL Server資料庫中。例如,如果你希望分析存儲在平面文件中的數據,那麼你必須先把數據導入到SQL Server資料庫中。

此外,該分析工具不支持創建額外的定製分析功能實現擴展。你看到的所有功能就是它能提供的所有功能。

局限性且放一旁,SQL Server附帶提供的這款工具為那些希望得到並能快速運行數據分析的人提供了很好的起點。

Ⅷ Python/PHP MySQL語句解析器解決業務分表

自己曾經做過一個網盤項目。剛開始由於需要快速地從0到1建設上線,所以沒有對核心文檔表進行分表。當然我的架構理念也是「按需架構設計」。產品需求在沒有明確的長遠計劃的情況下以「小步快跑,趕超競品」為主。後期由於產品功能觸達目標用戶群需求點、產品用戶體驗不斷提升、產品多方位導流、加強產品推廣文檔表每天有百萬數據增長量。不得不對文檔表進行按用戶id分表。當時產品功能已全覆蓋文檔的生命周期。產品功能已豐富多彩。修改所有關聯文檔表的業務代碼為按用戶id分表開發測試成本非常高。上線後線上問題不可控。經過考慮在業務代碼最底層DB層進行SQL語句解析來進行用戶id分表處理。這樣的話開發測試成本都非常低。上線後有問題方便回滾和追查原因。

今天為大家介紹Python/PHP兩種MySQL語句解析器。當時網盤項目用的是PHP編程語言開發。

Python的SQL語句解析器 。個人推薦使用moz_sql_parser庫。經調研官方的sqlparse庫解析出來的語句段無法滿足需求也很難理解。

1、Python moz_sql_parser庫安裝

2、Python moz_sql_parser SQL語句解析

3、Python moz_sql_parser總結

PHP的SQL語句解析器。 個人推薦使用PhpMyAdmin的sql-parser組件。PhpMyAdmin是經過 歷史 檢驗可信賴的。

1、PHP PhpMyAdmin/sql-parser安裝

2、PHP PhpMyAdmin/sql-parser SQL語句解析

3、PHP PhpMyAdmin/sql-parser總結

大家有什麼問題可以發評論溝通。

Ⅸ SQL查詢分析器是否能提取數據資料及如何操作

可以將查詢的結果導出.

  1. 寫一個查詢語句,比如 SELECT * FROM user;

  2. 執行查詢語句,可以看見數據表中有內容

  3. 以navicat為例,

  4. 後面的下一步即可

Ⅹ sql server查詢分析器,用sql語句往表中批量插入數據怎麼做,看圖.

參考如下:
導出到excel

EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P""'
/*********** 導入Excel
SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions

/*動態文件名
declare @fn varchar(20),@s varchar(1000)
set @fn = 'c:\test.xls'
set @s ='''Microsoft.Jet.OLEDB.4.0'',
''Data Source="'+@fn+'";User ID=Admin;Password=;Extended properties=Excel 5.0'''
set @s = 'SELECT * FROM OpenDataSource ('+@s+')...sheet1$'
exec(@s)
*/

SELECT cast(cast(科目編號 as numeric(10,2)) as nvarchar(255))+'' 轉換後的別名
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions

/********************** EXCEL導到遠程SQL
insert OPENDATASOURCE(
'SQLOLEDB',
'Data Source=遠程ip;User ID=sa;Password=密碼'
).庫名.dbo.表名 (列名1,列名2)
SELECT 列名1,列名2
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions

/** 導入文本文件
EXEC master..xp_cmdshell 'bcp dbname..tablename in c:\DT.txt -c -Sservername -Usa -Ppassword'

/** 導出文本文件
EXEC master..xp_cmdshell 'bcp dbname..tablename out c:\DT.txt -c -Sservername -Usa -Ppassword'

EXEC master..xp_cmdshell 'bcp "Select * from dbname..tablename" queryout c:\DT.txt -c -Sservername -Usa -Ppassword'

導出到TXT文本,用逗號分開
exec master..xp_cmdshell 'bcp "庫名..表名" out "d:\tt.txt" -c -t ,-U sa -P password'

BULK INSERT 庫名..表名
FROM 'c:\test.txt'
WITH (
FIELDTERMINATOR = ';',
ROWTERMINATOR = '\n'
)

--/* dBase IV文件
select * from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'dBase IV;HDR=NO;IMEX=2;DATABASE=C:\','select * from [客戶資料4.dbf]')
--*/

--/* dBase III文件
select * from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'dBase III;HDR=NO;IMEX=2;DATABASE=C:\','select * from [客戶資料3.dbf]')
--*/

--/* FoxPro 資料庫
select * from openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\',
'select * from [aa.DBF]')
--*/

/**************導入DBF文件****************/
select * from openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;
SourceDB=e:\VFP98\data;
SourceType=DBF',
'select * from customer where country != "USA" order by country')
go
/***************** 導出到DBF ***************/
如果要導出數據到已經生成結構(即現存的)FOXPRO表中,可以直接用下面的SQL語句

insert into openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\',
'select * from [aa.DBF]')
select * from 表

說明:
SourceDB=c:\ 指定foxpro表所在的文件夾
aa.DBF 指定foxpro表的文件名.

/*************導出到Access********************/
insert into openrowset('Microsoft.Jet.OLEDB.4.0',
'x:\A.mdb';'admin';'',A表) select * from 資料庫名..B表

/*************導入Access********************/
insert into B表 selet * from openrowset('Microsoft.Jet.OLEDB.4.0',
'x:\A.mdb';'admin';'',A表)

文件名為參數
declare @fname varchar(20)
set @fname = 'd:\test.mdb'
exec('SELECT a.* FROM opendatasource(''Microsoft.Jet.OLEDB.4.0'',
'''+@fname+''';''admin'';'''', topics) as a ')

SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="f:\northwind.mdb";Jet OLEDB:Database Password=123;User ID=Admin;Password=;')...產品

********************* 導入 xml文件

DECLARE @idoc int
DECLARE @doc varchar(1000)
--sample XML document
SET @doc ='
<root>
<Customer cid= "C1" name="Janine" city="Issaquah">
<Order oid="O1" date="1/20/1996" amount="3.5" />
<Order oid="O2" date="4/30/1997" amount="13.4">Customer was very satisfied
</Order>
</Customer>
<Customer cid="C2" name="Ursula" city="Oelde" >
<Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue
white red">
<Urgency>Important</Urgency>
Happy Customer.
</Order>
<Order oid="O4" date="1/20/1996" amount="10000"/>
</Customer>
</root>
'
-- Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc

-- Execute a SELECT statement using OPENXML rowset provider.
SELECT *
FROM OPENXML (@idoc, '/root/Customer/Order', 1)
WITH (oid char(5),
amount float,
comment ntext 'text()')
EXEC sp_xml_removedocument @idoc