原文:
如何使用OPENQUERY訪問另一個SQL Server
在項目中,經常會遇到一個數據庫訪問另一個數據庫,【CNVFERPDB】為服務器名,【CE3】為庫名
1 SELECT Dtl. * 2 FROM CNVFERPDB. CE3.ce3.ZTLE0125 Dtl 3 INNER JOIN CNVFERPDB.CE3.ce3.ZTLE0124 Mst 4 ON Dtl.RECVSUPPNO = Mst.RECVSUPPNO AND Dtl.MANDT = Mst.MANDT 5 WHERE Mst.MANDT = ' 100 ' and Dtl.BRANDCODE = ' MD '
上面的方式是通過服務器名和庫名直接訪問,這樣有多次連接另一個服務器,執行速度會很慢
可以換做下面的形式,執行速度將得到提升:
1 SELECT * 2 FROM OPENQUERY (CNVFERPDB 3 , 4 ' 5 SELECT Dtl.* 6 FROM CE3.ce3.ZTLE0125 Dtl 7 INNER JOIN CE3.ce3.ZTLE0124 Mst 8 ON Dtl.RECVSUPPNO = Mst.RECVSUPPNO AND Dtl.MANDT = Mst.MANDT 9 WHERE Mst.MANDT = '' 100 '' and Dtl.BRANDCODE= '' MD '' 10 ' 11 )
OPENQUERY ( linked_server ,'query' )
使用注意事項:
linked_server?
表示鏈接服務器名稱的標識符。
' query '
在鏈接服務器中執行的查詢字符串。 該字符串的最大長度為 8 KB。
補充
1 declare @Day VARCHAR ( 10 ) = CONVERT ( CHAR ( 8 ), DATEADD ( DAY , - 1 , GETDATE ()), 112 ) 2 3 -- set @Day='20140605' 4 5 IF EXISTS ( select * from AppLog where Dates = @Day ) 6 return 7 8 declare @sql VARCHAR ( 2000 ) = ' select * 9 INTO #temp 10 from openquery 11 ([CNSASPLOGDB01], 12 '' 13 select 14 A.ProgramId 15 , ''''' + @Day + ''''' AS Dates 16 ,COUNT(Duration) as Count 17 ,SUM(CAST(Duration AS DECIMAL(12,3)))/1000 AS SumTime 18 ,AVG(CAST(Duration AS DECIMAL(12,3)))/1000 as AvgTime 19 ,MAX(CAST(Duration AS DECIMAL(12,3)))/1000 as MaxTime 20 from 21 ( 22 select * from LogCSLK01.dbo.AppLog_ ' + @Day + ' with(nolock) 23 union 24 select * from LogCSLK02.dbo.AppLog_ ' + @Day + ' with(nolock) 25 union 26 select * from LogCSLK03.dbo.AppLog_ ' + @Day + ' with(nolock) 27 ) A 28 group by A.ProgramId 29 '' 30 ) 31 32 insert into AppLog 33 select * 34 from #temp 35 36 drop table #temp 37 ' 38 -- print @sql 39 40 exec ( @sql )
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
