標籤:style blog http io ar color os 使用 sp
原文:如何使用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 #temp10 from openquery11 ([CNSASPLOGDB01],12 ‘‘13 select 14 A.ProgramId15 ,‘‘‘‘‘+@Day+‘‘‘‘‘ AS Dates16 ,COUNT(Duration) as Count17 ,SUM(CAST(Duration AS DECIMAL(12,3)))/1000 AS SumTime18 ,AVG(CAST(Duration AS DECIMAL(12,3)))/1000 as AvgTime19 ,MAX(CAST(Duration AS DECIMAL(12,3)))/1000 as MaxTime20 from 21 (22 select * from LogCSLK01.dbo.AppLog_‘+@Day+‘ with(nolock)23 union24 select * from LogCSLK02.dbo.AppLog_‘+@Day+‘ with(nolock)25 union26 select * from LogCSLK03.dbo.AppLog_‘+@Day+‘ with(nolock)27 ) A28 group by A.ProgramId29 ‘‘30 )31 32 insert into AppLog33 select * 34 from #temp35 36 drop table #temp37 ‘38 --print @sql39 40 exec(@sql)
如何使用OPENQUERY訪問另一個SQL Server