mysql不同服务器数据库查询_不同服务器不同数据库两张表连接查询使用经验
使用SQL語句連接查詢位于兩個不同的服務器不同的數據庫中的兩張表,最初將SQL語句寫成以下形式select*fromProduct?pinnerjoin
opendatasource('SQLOLEDB','Data?Source=Macaco-Online;user?ID=sa;password=sa密碼;').Company.dbo.Product?p2
onP.PID=p2.PID
go
執行時出現錯誤提示:
-----------------------------------------------------------------
消息 15281,級別 16,狀態 1,第 1 行?SQL Server 阻止了對組件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的訪問,因為此組件已作為此服務器安全配置的一部分而被關閉。系統管理員可以通過使用 sp_configure 啟用 'Ad Hoc Distributed Queries'。有關啟用 'Ad Hoc Distributed Queries' 的詳細信息,請參閱 SQL Server 聯機叢書中的 "外圍應用配置器"。
-----------------------------------------------------------------
嗯,這個提示似乎很明確,從上面的提示我們可以知道只要啟用外圍應用配置器的Ad Hoc Distributed Queries組件即可,隨即把自己機器上數據庫服務器的外圍應用配置器打開,找到Ad Hoc Distributed Queries組件并將其啟用(啟用步驟:右擊自己的數據庫服務器,在右鍵菜單中選擇“方面” 在彈出的的窗口中有一個名為方面的下拉列表先項點開后選擇“外圍應用配置器”選項,然后在下面的方面屬性窗口中將AdHocremoteQueriesEnabled的狀態改成true點擊確定即要可)。
現在就可以執行上面的應該查詢語句了。
但是,這似乎并不能滿足我們的需要
例如:我們要在自己的程序中做這樣的的查詢那該怎么辦呢?總不能一直這樣開著吧,這可是對服務器有安全損耗的。嗯,我可不會就這樣把自己服務器的安全級別降低哦。
好吧,我們現在需要使用SQL命令來啟用和禁用這個組件,但是怎么做呢? 不要急再分析一下上面出錯時的提醒我們便可以知道使用SP_Configure便可以啟用禁用這個組件了,現在改變我們的SQL命令如下所示:execsp_configure'show?advanced?options',1
reconfigure
execsp_configure'Ad?Hoc?Distributed?Queries',1
reconfigure
go
select*fromProduct?pinnerjoin
opendatasource('SQLOLEDB','Data?Source=Macaco-Online;user?ID=sa;password=sa密碼;').Company.dbo.Product?p2
onP.PID=p2.PID
go
execsp_configure'Ad?Hoc?Distributed?Queries',0
reconfigure
execsp_configure'show?advanced?options',0
reconfigure
go
嗯,這樣我們就可以在需要啟用這樣組件的時候啟用即可(注:Ad?Hoc?Distributed?Queries是高級配置所以需要先啟用Show advanced options ,也就是說無論你是要啟用Ad?Hoc?Distributed?Queries,還是禁用都必須保證show?advanced?options為啟用狀態)有些朋友便疑惑了,你這樣又是存儲過程,又是SQL語句的,我在程序里該執行什么類型的命令啊?呵呵,其實, SqlCommand對象執行命令時,就象是我們用Microsoft SQL Server Management Studio新建了一個查詢窗口一樣,在這個查詢窗口里,你可以執行什么 SqlCommand對象就可以執行什么,所以你只要將上面的sql命令中的換行符替換成空格組成一串字符串然后把他賦值給SqlCommand對象的CommadnTest屬性,然后執行就可以了(哦,好像我還沒有使用這種方法創建數據庫,不過如果你連接數據庫使用的用戶權限足夠的話,應該也沒有什么問題!)
原文鏈接:http://www.cnblogs.com/macacoonline/archive/2011/02/25/1964674.html
補充閱讀:
來源:博客園
作者:鄒澤棟1,一個服務器中兩個不同數據庫的兩個表查詢
select * from 數據庫1.表名 A,數據庫2.表名 b on A.Id=B.Ids
2,同一庫中兩表或多表的查詢方式
兩表查詢 select * from TB1 left join TB2 On tb1.where = tb2.where 或者 select * from TB1 ,TB2? where tb1.where = tb2.where
多表查詢??? select * from tb1 left? join tb2? on tb1.where =tb2.where inner join tb3 on (tb3.wehre = tb2.where) inner join tb4.......................
cross join:是笛卡兒乘積,在沒有任何條件約束下就是一張表的行數乘以別一張表的行數。
left join:返回“表名1”的全部行,對于“表名2”中,不滿足on條件的記錄用空值替換。
rigth join:返回“表名2”的全部行,對于“表名1”中,不滿足on條件的記錄用空值替換。
full join:返回兩張表中的所有記錄,對于不滿足on條件一端的記錄用空值替換。
inner jon:只返回兩張表中都滿足on條件的記錄原文鏈接:http://www.cnblogs.com/zouzedong/archive/2011/02/27/1966534.html
【編輯推薦】
總結
以上是生活随笔為你收集整理的mysql不同服务器数据库查询_不同服务器不同数据库两张表连接查询使用经验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: date oracle 显示毫秒_ora
- 下一篇: 换一个发型是不是人的气质就能有很大变化?