原創 OpenQuery教程及日期條件式

2021-09-05 21:47:40 字數 2335 閱讀 9964

近日因為公司系統需要,要從sql2005鏈結informix進行資料同步,搜遍了網上竟然沒有針對openquery專門的介紹和解答;所以才有此文,針對初學者、使用過的、遇到問題的,蒐羅並根據實際經驗撰寫此文;

一、openquery 函式介紹

重點:

.使用 openquery 函式在鏈結伺服器上執行直接傳遞查詢的語法和事實;

.直接傳遞查詢示例的 sql 語句:在鏈結伺服器 ***server 上執行 select 語句,並從傳遞回來的結果集中取出所有內容;

執行直接傳遞查詢使用 openquery 函式進行直接傳遞查詢

可以在 select 語句中用 openquery 函式的結果代替表名的位置

若 ole db 提供程式支援,還可以用 openquery 函式的結果作為 insert、update 或 delete 語句的目標表

直接傳遞查詢示例

select * from openquery (***server, 'select productid, royalty from northwind.dbo.productinfo')

二、查詢、新增、更新、刪除

假設在第一步的設定裡「鏈結伺服器名」裡填入的是「test」,查詢、寫入、更新及刪除以表tablename為例用如下語句

查詢:select * from openquery(test, 'select * from tablename')

寫入:insert into openquery(test, 'select * from tablename where 1>1') values(3,6,'andy')

更新:update openquery(test, 'select * from tablename') set role_id = 'fortest' where id = 3

刪除:delete openquery(test, 'select * from tablename') where id in (1,3)

以上語句在查詢分析器裡執行通過。

另:t-sql 中,insert 可以省略 into,delete 也可以省略 from。 insert 時必須明確 select 的字段。

這裡最關鍵的是使用sql的函式openquery,查詢、寫入、更新及刪除的目標表都用openquery函式來開啟oracle的表就可以了,有關openquery函式的說明,sql server的幫助文件裡如下:

openquery

在給定的鏈結伺服器(乙個 ole db 資料來源)上執行指定的直接傳遞查詢。可以在查詢的 from 子句中像引用表名那樣引用 openquery 函式。依據 ole db 提供程式的能力,還可以將 openquery 函式引用為 insert、update 或 delete 語句的目標表。儘管查詢可能返回多個結果集,但是 openquery 只返回第乙個。

語法openquery ( linked_server , 'query' )

引數linked_server

乙個識別符號,表示鏈結的伺服器的名稱。

'query'

在鏈結的伺服器中執行的查詢字串。

注釋openquery 不接受引數變數。

三、openquery 的日期時間條件式

不建議使用:select * from openquery(linked_server ,'select * from kxx_file  ') where kxx07='2009-10-08'

該語句查詢耗時18s;很明顯return的資料相當大,再進行篩選;

建議使用:select * from openquery(linked_server ,'select * from kxx_file where kxx07= ')

該語句查詢耗時3s;在linked_server執行完篩選才return的,table的資料量越大效果越明顯;

以上針對鏈結informix,測試了許久才發現openquery對欄位型別的轉換有失水準!大家使用的時候一定要注意,對字元和數字影響較小!

四、openquery 的引數問題

openquery 不接受引數變數,也就是說:delete openquery (linked_server, 'select id from msgs where id=' + @id); 是不正確的,但可以這樣做:delete openquery (linked_server, 'select id from msgs') where id=@id); 。

原創教程 鯨吞HTML

首先,我們的angularjs課程分為三大模組 其中,第一大模組的物件是對前端開發技術有點了解但不熟悉的童鞋,其中會對html css的基礎進行學習,由於本課程的性質,會對其中的js著重講解。第二大模組的物件導向是對前端技術html css js有了一定了解的童鞋,能構建網頁。第三大模組則是我們這個...

原創 substr 中文詳解教程

substr 函式功效 字串擷取函式,只限單位元組字元使用 對於中文的擷取時遇上奇數長度是會出現亂碼,需另行處理 本函式可擷取字串指定範圍內的字元。應用範圍 標題 內容擷取 函式格式 stringsubstr string string,int start int length 引數1 處理字串 引...

原創 Ajax TreeView 控制項及範例

已經更新,新增了節點縮排圖形 04 29 只實現很簡單的功能,但很好用,使用xml儲蓄,暫時沒有優化,但速度很快.1.使用該控制項需要空間支援目錄寫許可權.重要 2.控制項會在根目錄下自動生成以下文件 這個是自動生成的,無須理會 1.xml xml shopclass.xml 自己手動新增節點也可以...