1. 程式人生 > >觸發器問題(怎樣在一個數據庫中的觸發器中訪問另一個數據庫裡面的表呢)

觸發器問題(怎樣在一個數據庫中的觸發器中訪問另一個數據庫裡面的表呢)

--如果兩個庫在同一個sql例項中   
    
  select   *   from   另一庫.dbo.表   
        
--如果兩個庫在不同的sql例項中   
    
  select   *   from   openrowset('sqloledb','另一sql例項名';'sa';'111',另一庫.dbo.表) 

--訪問不同電腦上的資料庫(遠端只要聯好網就一樣)   
    
  --如果經常訪問或資料量大,建議用連結伺服器   
    
  --建立連結伺服器   
  exec   sp_addlinkedserver     'srv_lnk','','SQLOLEDB','遠端伺服器名或ip地址'   
  exec   sp_addlinkedsrvlogin   'srv_lnk','false',null,'使用者名稱','密碼'   
  go   
    
  --查詢示例   
  select   *   from   srv_lnk.資料庫名.dbo.表名   
    
  --匯入示例   
  select   *   into   表   from   srv_lnk.資料庫名.dbo.表名   
    
  go   
  --以後不再使用時刪除連結伺服器   
  exec   sp_dropserver   'srv_lnk','droplogins'   
    
    
  --如果只是臨時訪問,可以直接用openrowset   
  --查詢示例   
  select   *   from   openrowset('SQLOLEDB'   
  ,'sql伺服器名';'使用者名稱';'密碼'   
  ,資料庫名.dbo.表名)   
    
    
  --匯入示例   
  select   *   into   表   from   openrowset('SQLOLEDB'   
  ,'sql伺服器名';'使用者名稱';'密碼'   
  ,資料庫名.dbo.表名)   
    

如果你在觸發器中訪問不同sql例項下的資料,還要注意一個事務的問題.   
    
  必須啟動你的sql伺服器和你訪問的sql伺服器上的msdtc服務   
  我的電腦--控制面板--管理工具--服務--右鍵   Distributed   Transaction   Coordinator--屬性--啟動,並將啟動型別設定為"自動啟動"   

---------------------------------------------------

  1、同伺服器   select   *   from   資料庫名.dbo.表名   where   條件   
  2、不同伺服器     
  SELECT   *   FROM   OpenRowset('MSDASQL',   'Driver=SQL   Server;Server=伺服器名(或IP);UID=sa;PWD=伺服器資料庫密碼',   資料庫名.dbo.表   )   where   條件   
  SELECT   *   
  FROM   OPENROWSET('SQLOLEDB','伺服器名(或IP)';'sa';'伺服器資料庫密碼',   
        '查詢的sql語句')     
    
  SELECT       *   
  FROM           OPENDATASOURCE(   
                    'SQLOLEDB',   
                    'Data   Source=伺服器名(或IP);User   ID=sa;Password=伺服器資料庫密碼'   
                    ).資料庫名.dbo.表   where   條件