在我们日常使用SQL Server数据库时,经常遇到需要在实例Instance01中跨实例访问Instance02中的数据。例如在做数据迁移时,如下语句:
insert into Instance01DB01dboTable01
select from Instance02DB01dboTable01
普通情况下,这样做是不允许的,因为SQL Server默认不可以跨实例访问数据。解决方案是使用存储过程sp_addlinkedserver进行实例注册。
sp_addlinkedserver在MSDN中的定义为:
sp_addlinkedserver [ @server= ] 'server' [ , [ @srvproduct= ] 'product_name' ]
[ , [ @provider= ] 'provider_name' ]
[ , [ @datasrc= ] 'data_source' ]
[ , [ @location= ] 'location' ]
[ , [ @provstr= ] 'provider_string' ]
[ , [ @catalog= ] 'catalog' ]
例如:在Instance01实例中,执行如下SQL语句
EXEC sp_addlinkedserver ‘Instance02’ //只写第一个参数即可,默认情况下,注册的是SQL Server数据库,其他参数用法详见MSDN。
如果你的两个实例在同一个域中,且Instance01与Instance02有共同的域登陆帐号,那么经过上面的注册后,前面的insert语句就可以执行了。否则,还需要对注册的远程实例进行登陆帐号注册,在Instance01实例中,执行如下SQL语句
EXEC sp_addlinkedsrvlogin 'InstanceName','true' //使用集成认证访问远程实例
或者 EXEC sp_addlinkedsrvlogin 'InstanceName','false','TJVictor,'sa','Password1' //使用Windows认证访问远程实例,当用户以TJVictor用户登陆Instance01实例访问Instance02时,默认把TJVictor映射成sa,且密码为Password1
经过 sp_addlinkedserver实例注册和sp_addlinkedsrvlogin登陆帐户注册后,就可以在Instance01中直接访问Instance02中的数据库数据了。
如果还无法访问,请检查本机DNS是否可以解析远程数据库的实例名。如果无法解析,可以在EXEC sp_addlinkedserver ‘Instance02’中把Instance02换为IP,或者在hosts文件中,自己建立相应DNS映射。
这个要看下具体格式,如果只是将数据库中的明细数据逐条导出到 excel 中的话,这个直接使用开源的 poi 就行,具体可以直接百度下,但是这种实际上没多大意义,大多数的需求是要求按照特定的格式导出,比如订单信息表要求每个订单号的数据导出到一个 sheet 里,这样的话通常建议采用报表工具做,比如我这边之前用过的润乾报表,主要原因:
一:以特定格式导出时,用报表工具设置格式更为方便,尤其是样式比较复杂时,报表工具的优势就更加明显。
二:报表工具直接带有导出 excel 的功能按钮,直接使用就行。
二:报表工具中还会提供灵活的接口提供调用来实现更加灵活的需求,比如可以批量的将多个报表结果导出到一个 excel 中,并且这个过程可以控制不在页面端展现,直接后台进行导出。
这样就可以通过报表工具将数据库中的数据已特定的格式导出到 excel 文件里
跨库分两种,
1、在同一实例下,可以直接访问,访问方式 库名dbo表名,如在a库访问b库的表,adbo表1
2、在不同实例或者不同服务器下,可以使用链接服务器,首先配置链接服务器,访问方式 链接服务器名库名dbo表名
以上就是关于SqlServer如何跨实例访问数据库全部的内容,包括:SqlServer如何跨实例访问数据库、把数据库中的数据导成图表用到什么技术、求教一下,sql server2008 跨数据库查询等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)