zoukankan      html  css  js  c++  java
  • SQL Server如何使用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)
  • 相关阅读:
    Spring Boot 是什么?
    python学习笔记
    csu oj 1344: Special Judge
    csu oj 1343 Long Long
    csu oj 1342: Double
    csu oj 1341 string and arrays
    机器学习之——认识机器学习
    CSU OJ 1340 A Sample Problem
    java logback 正则过滤
    java vm (二) 之 虚拟机启动对类的操作
  • 原文地址:https://www.cnblogs.com/mybky/p/3448042.html
Copyright © 2011-2022 走看看