怎样在一个数据库中访问另一个数据库里面的表


触发器问题(怎样在一个数据库中的触发器中访问另一个数据库里面的表呢)
     

--如果两个库在同一个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   条件

文章来源

http://dhp3s.blog.sohu.com/9408958.html

你可能感兴趣的:(怎样在一个数据库中访问另一个数据库里面的表)