原文:
如何使用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元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

