-- 很多朋友问局域网多数据库服务器访问该如何操作?下面简单说明如何配置远程链接访问。
/*********** 环境说明 ***********/
-- 源机器 IP 为 10. 0.0.211 ,在该机器所在数据库建立与目标机器的远程数据库链接。
-- 目标机器 IP 为 10. 0.0.222 。
-- 步骤(一)是指直接用 IP 进行远程链接,个人觉得用 IP 链接虽然麻烦,但是直观而且在多服务器操作时不会出现误链接的情况。
-- 步骤(二)是指直接用别名进行远程链接,较方便;但在高压力,大脑暂时短路情况下容易出现误链接数据库情况发生。
/*********** 步骤(一) ***********/
-- 建立连接服务器
EXEC sp_addlinkedserver '10.0.0.222' , 'SQL Server'
/*-- 如果数据库有架构名需要做远程登录之间的映射
-- 创建链接服务器上远程登录之间的映射
EXEC sp_addlinkedsrvlogin '10.0.0.222','false','SA',' 架构名 ',' 登录密码 '
*/
-- 查询数据
-- 含架构名
select top 10 * from [10.0.0.222]. 数据库名 . 架构名 . 表名
-- 不含架构名
select top 10 * from [10.0.0.222]. 数据库名 . dbo. 表名
-- 查看链接服务器信息
select name , product, provider, data_source, query_timeout, lazy_schema_validation, is_remote_login_enabled, is_rpc_out_enabled
from sys.servers
where is_linked= 1
/*********** 建立步骤(二) ***********/
/*-- 如果用 IP 连接觉得麻烦,可以新建别名
-- 配置链接服务器属性
exec sp_serveroption '222','name','10.0.0.222'
*/
-- 查询数据
-- 含架构名
select top 10 * from 222. 数据库名 . 架构名 . 表名
-- 不含架构名
select top 10 * from 222. 数据库名 . dbo. 表名
-- 删除链接服务器登录名映射
exec sp_droplinkedsrvlogin '10.0.0.222' ,NULL
-- 删除链接服务器属性
exec sp_dropserver '222'
--注:如果执行 删除链接服务器时提示如下错误时,
消息 15190,级别 16,状态 1,过程 sp_dropserver,第 56 行仍有对服务器 'XXXX' 的远程登录或链接登录。
执行
exec sp_dropserver ' 链接服务器 ' , 'droplogins'
select * from [Form_016336CC-C7FA-43D2-9EA5-C3F9A5B47A50_0]
use 库名 go SELECT objtype, objname, name, value FROM fn_listextendedproperty( default , default , default , default , default , default , default ); select * from sys.extended_properties SELECT objtype, objname, name, value FROM fn_listextendedproperty( NULL , ' schema ' , ' dbo ' , ' table ' , ' form ' , ' column ' , default ); select * from information_schema.columns where table_name = ' form ' SELECT DISTINCT TOP 100 PERCENT isnull (p.name, '' ) AS 父对象, o.xtype, CASE o.xtype WHEN ' C ' THEN ' CHECK 约束 ' WHEN ' D ' THEN ' 默认值或DEFAULT约束 ' WHEN ' F ' THEN ' FOREIGNKEY约束 ' WHEN ' L ' THEN ' 日志 ' WHEN ' FN ' THEN ' 标量函数 ' WHEN ' IF ' THEN ' 内嵌表函数 ' WHEN ' P ' THEN ' 存储过程 ' WHEN ' PK ' THEN ' PRIMARYKEY约束 ' WHEN ' RF ' THEN ' 复制筛选存储过程 ' WHEN ' S ' THEN ' 系统表 ' WHEN ' TF ' THEN ' 表函数 ' WHEN ' TR ' THEN ' 触发器 ' WHEN ' U ' THEN ' 用户表 ' WHEN ' UQ ' THEN ' UNIQUE 约束 ' WHEN ' V ' THEN ' 视图 ' WHEN ' X ' THEN ' 扩展存储过程 ' WHEN ' R ' THEN ' 规则 ' ELSE NULL END AS 类型, o.name AS 对象名, o.crdate AS 创建时间, o.refdate AS 更改时间, c. text AS 声明语句, OBJECTPROPERTY (o.id, N ' IsMSShipped ' ) FROM dbo.sysobjects o Left JOIN dbo.sysobjects p ON o.parent_obj = p.id LEFT OUTER JOIN dbo.syscomments c ON o.id = c.id WHERE -- (o.xtype IN ('C','D','F','PK','UQ','L','FN','IF','TF','TR','P','R','RF','X','S','U','V')) AND ( OBJECTPROPERTY (o.id, N ' IsMSShipped ' ) = 0 ) AND ( isnull (p.name, '' ) <> N ' dtproperties ' ) and o.xtype = ' U ' ORDER BY o.xtype DESC if exists ( select 1 from sysobjects where id = object_id ( ' BarCode ' ) and type = ' U ' ) drop table BarCode go /* ============================================================== */ /* Table: BarCode */ /* ============================================================== */ create table BarCode ( ID int not null , Style char ( 18 ) null , Content varchar ( 512 ) null , Height int null , Wdith int null , Remark varchar ( 512 ) null , constraint PK_BARCODE primary key (ID) ) go select * from Form where id = ' 016336CC-C7FA-43D2-9EA5-C3F9A5B47A50 ' select * from [ Form_016336CC-C7FA-43D2-9EA5-C3F9A5B47A50_0 ] select o.name,c. text , ' N ' from [ InsulationExpertSystem_CD_2010-02-16_backup ] .dbo.sysobjects o ,dbo.syscomments c where o.id = c.id and o.xtype = ' V ' and o.name = ' View_1 ' -- 创建链接服务器: exec master.sys.sp_addlinkedserver ' srv_lnk ' , '' , ' SQLOLEDB ' , ' DEVELOPPC-PC ' exec master.sys.sp_addlinkedsrvlogin ' srv_lnk ' , ' false ' , null , ' sa ' , ' sa ' exec master.sys.sp_serveroption ' srv_lnk ' , ' rpc out ' , ' true ' -- 这个允许调用链接服务器上的存储过程 go -- exec master.sys.sp_dropserver 'srv_lnk','droplogins' --不用就删除 -- go 用SQL语句将远程SQL Server数据库中表数据导入到本地数据库相应的表中
怎样用SQL语句将一个远程SQL Server数据库中各个表的数据导入到本地数据库相应的表中
发表时间:2005-7-18
怎样用SQL语句将一个远程SQL Server数据库中各个表的数据导入到本地数据库相应的表中?
表结构完全相同,听说DTS比较方便,但是不会用
一、方法一
1、远程数据库注册到本地的方法:
exec sp_addlinkedserver '名称','','SQLOLEDB','远程数据库的地址' exec sp_addlinkedsrvlogin '名称','false','本地用户名称','远程用户名称','远程用户密码' |
2、倒入表
insert 数据库.dbo.表 select * from 远程名称.dbo.表 |
建立了连接后,试试看
二、方法二
访问不同电脑上的数据库(远程访问,只好联好网就一样),如果经常访问或数据量较大,建议用链接服务器方法。
1、创建链接服务器
exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','远程服务器名或IP地址' exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用户名','密码' exec sp_serveroption 'srv_lnk','rpc out','true' --这个允许调用链接服务器上的存储过程 go |
2、使用示例
--查询示例 select * from srv_lnk.数据库名.dbo.表名 --导入示例 select * into 表 from srv_lnk.数据库名.dbo.表名 go |
3、若不再使用时,删除链接服务器
exec sp_dropserver 'srv_lnk','droplogins' |
三、方法三
如果只是临时访问,可以直接使用openrowset。
1、示例1
--查询示例 select * from openrowset('SQLOLEDB' ,'sql服务器名';'用户名';'密码',数据库名.dbo.表名) --导入示例 select * into 表 from openrowset('SQLOLEDB' ,'sql服务器名';'用户名';'密码',数据库名.dbo.表名) |
2、示例2(此示例使用测试正常)
insert 数据库名称.dbo.表 select * from from openrowset('MSDASQL', 'DRIVER={SQL Server};SERVER=远程服务器地址;UID=用户名;PWD=密码',表) AS a |
四、相关问题
问:当导入的数据量很大,而网络突然中断,会不会出现问题?
答:中断的话,就等于什么也没做,也就是事务回滚,重新运行。
五、随后的问题
问:由于在表中,通常都定义了自增量列及主键,而自增量列还进行了关连。由于在倒表时,自增量列不随原表变化,就造成了关联关系的丢失,通常的做法是:
SET IDENTITY_INSERT 表名 ON insert into 表名(字段,字段,字段) values (64,'han','guo') SET IDENTITY_INSERT 表名OFF |
即使用“SET IDENTITY_INSERT 表名 ON”将自增量关闭,但是,需要注意的是,当该表中没有自增量字段时,使用该命令会产生一个错误。
因此,在没有自增量字段的表中进行“插入”操作时,请不要使用“SET IDENTITY_INSERT 表名 ON”。