In 子句的使用範例


這個主題是在小紀的 VB 入門網中有網友問到。由於小紀那邊阻擋搜尋引擎入內搜尋,所以我再做範例的時候,就在思考這件事,怎樣讓範例能夠被更多人搜尋到,進而解決問題,所以想想還是回到 Live Spaces 這邊來貼,免得答不完。
In 子句可加速匯出、匯入到不同資料庫的速度,可比手動逐行轉換約快 3 倍左右的時間,例如 8843 筆 4 欄倍精度由 Access 匯出到 Excel ,在我現在的 酷睿2 E6400 下,按下轉換就轉好了,根本不到 0.1 秒 (無法計算秒數),CPU 負載跟沒動一樣,例如 76654 筆 4 欄倍精度由 SQL Server 2005 匯出到 Access 只要 3 ~ 4 秒,但是缺點就是沒有進度列,大量轉換就比較麻煩了。
我自己主要應用 in 子句是在 SQL Server 連續型資料庫將資料匯出轉換成為 Access 事件型資料庫,比如說連續每小時的颱風路徑、降雨、逕流、水庫放水、入流量等資料庫是存放在 SQL Server 內,而要進行某場颱風洪水演算時,SQL Server 就顯得過於龐大,而且不利於離線演算,因此匯出成為單場颱風事件的 Access 檔,並可針對各種不同的操作策略跟預報結果分配到不同的電腦或由不同的操作人員進行試算,進而匯整所有演算成果,進行更完整的水庫放水策略建議。
應用例可參考:

周乃昉、鄭子璉,「曾文溪流域水庫整體防洪運轉展示決策系統建置」,中華民國資訊學會通訊,台灣,台北,第八卷,第一期,第 209 – 236 頁,民國 94 年 3 月。[PDF]

若在 WinXP SP1 上應用時,可能會有問題,不知道這部分微軟是否更新,但在 WinXP SP2 上則無此問題,相關討論緒可參考 Groups google 先前我張貼的文章:關於 In 子句的應用

前面廢話這麼多就是打算將來若有再回網友其他資料庫的範例語法時,我就透過新增回應來加入到本討論緒,所以前面廢話比較多,範例將從回應內開始寫。

為了定義將來寫範例有標準可以遵循,讓網友比較容易看懂,比較複雜的外部資料庫將以粗體字呈現,比較簡單的目前資料庫則以斜體字呈現。使用 ADO 或 ADO.NET 時,連線字串請使用目前資料庫為連線字串,外部資料庫則在查詢字串內

註:關於 In 子句的資料來源請參考 http://support.microsoft.com/ 及 Access 附的線上手冊:

Office 2003 :C:\Program Files\Common Files\Microsoft Shared\OFFICE11\1028\JETSQL40.CHM
Office XP :C:\Program Files\Common Files\Microsoft Shared\OFFICE10\1028\JETSQL40.CHM

此線上手冊附有 SQL 語法說明與範例,非常值得參考,我自己是把捷徑建到開始工具列,In 子句可用索引尋找,或在 Select…Into 陳述式下方的參考連結找到。

Categories: 資料庫 | 6 則迴響

文章分頁導航

6 thoughts on “In 子句的使用範例

  1. 子璉

    Access 匯出到 Excel 檔
    新表格:檔案若不存在可自動產生
    SELECT *Into List In "d:\temp\hazard.xls" "EXCEL 5.0;" From List ;

    SELECT *Into List In "" [EXCEL 8.0; database=d:\temp\hazard.xls; ] From List ;
    註:
    1. 版本考量最大相容度可用舊版版號,若不需考量最大相容度,可逕用新版版號。
    2. 建議開發測試環境:在來源 Access 檔內使用 查詢 SQL查詢 功能。但在 Access 內無法測試外部資料庫用 odbc 字串,也無法插入資料到既存 Excel 檔內,可能要以既存 Excel 檔為開啟資料庫,Access 為外部資料庫。
    3. 也可以用 ADO/ADO.NET 開啟 Excel 連線,以 Access 為外部資料庫作為來源,就本例來說,以 Excel 做為外部資料庫較為方便。

  2. 子璉

    SQL Server 匯出到 Access 檔

    新表格
    SELECT *INTO List
    FROM List
    IN " [odbc; Driver={SQL Server}; Server=伺服器; DataBase=資料庫; UID=帳號; PWD=密碼; ]
    ;
    既存表格

    INSERT INTO List
    SELECT *FROM List
    IN " [odbc; Driver={SQL Server}; Server=伺服器; DataBase=資料庫; UID=帳號; PWD=密碼; ]
    ;
     
    開發測試環境:VS2005 伺服器資料總管、SQL Server 2005 Developer、Access 2003。
    測試過程中發現,用 SQL Server 做目前資料庫無法識別 In 子句,估計是 SQL Server 的查詢引擎不支援,必須使用 Jet 引擎才可以。所以必須用 Access 做目前資料庫,SQL Server 做外部資料庫。
    在 Win2003 R2 中,使用 OdbcConnection 來連接 Access 會跟先前在 WinXP SP2 上發生相同的狀況,會有錯誤訊息:
    ODBC– 連接 ‘{SQL Server}(local)’ 失敗。
    但是用 OleDbConnection 時,相同的 SQL 語法查詢則可以執行。

  3. 子璉

    Access 匯出到 Excel 檔
    既存表格:
    INSERT INTO List
    IN " [EXCEL 8.0; database=d:\temp\hazard.xls; ]SELECT *FROM List;
    註:
    1. 開發測試環境:VS2005 伺服器資料總管,用 OdbcConnection 建立連線,可插入既有資料表。並可測試 odbc 指定外部資料庫為 Excel ,不過目前會發生找不到資料庫。

  4. 子璉

    Access 匯出到 dBase 檔
    新表格:檔案若不存在可自動產生,但目錄需事先存在。
    SELECT * Into ServerList In " [dBase III; DATABASE=D:\Temp\DB4;]FROM ServerList ;
    SELECT * Into ServerList In " [dBase IV; DATABASE=D:\Temp\DB4;]FROM ServerList ;
    SELECT * Into ServerList In "D:\Temp\DB4" "dBASE IV;"FROM ServerList ;
    SELECT * Into ServerList In "D:\Temp\DB4" "dBASE III;"FROM ServerList ;
    註:
    以上四句同樣的效果,可用 OleDb / ODBC 執行,開發測試環境:VS2005 伺服器資料總管,用 OdbcConnection 建立連線。

  5. 子璉

    SQL Server 匯出到 Excel 檔
    新表格
    SELECT *INTO [List$]
    FROM List IN " [odbc; Driver={SQL Server}; Server=伺服器; DataBase=資料庫; UID=帳號; PWD=密碼; ];
    既存表格
    INSERT INTO [List$]
    SELECT *FROM List IN " [odbc; Driver={SQL Server}; Server=伺服器; DataBase=資料庫; UID=帳號; PWD=密碼; ]; 
    開發測試環境:
    VS2005 伺服器資料總管、SQL Server 2005 Developer、Excel 2003。測試過程中發現,用 SQL Server 做目前資料庫無法識別 In 子句,估計是 SQL Server 的查詢引擎不支援,必須使用 Jet 引擎才可以。所以必須用 Excel 做目前資料庫,SQL Server 做外部資料庫。
    在 VS2005 伺服器總管連接 Excel 資料庫步驟如下:
    1. 資料連接 滑鼠右鍵 加入資料連接
    2. 資料來源 變更:選 ,資料提供者手動選 .Net Framework Data Provider for OLE DB
    3. OLE DB 提供者:選 Microsoft Jet 4.0 OLE DB Provider
    4. 伺服器名稱或檔名輸入 Excel 完整路徑含檔名
    5. 進階 Extended Properties 屬性 輸入 Excel 8.0;HDR=Yes;
    確定即可。

  6. 子璉

    MySQL 匯出到 Access 檔
    新表格
    SELECT *INTO List
    FROM List IN " [odbc; Driver={MySQL ODBC 5.1 Driver}; Server=伺服器; DataBase=資料庫; user=帳號; Password=密碼; option=3; ];
    既存表格
    INSERT INTO List
    SELECT *FROM List IN " [odbc; Driver={MySQL ODBC 5.1 Driver}; Server=伺服器; DataBase=資料庫; user=帳號; Password=密碼; option=3; ];
    開發測試環境:VS2008 伺服器資料總管、MySQL Server 5.0、Access 2003。使用 Access 做目前資料庫,MySQL 做外部資料庫。

發表留言

在 WordPress.com 建立免費網站或網誌.