请教高手:希望用sql语句完成本地(内网)数据库向公网数据库复制表(要求数据与表结构一起完成) 如题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不同服务器数据库之间的数据操作--创建链接服务器 exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用户名 ', '密码 ' --查询示例 select * from ITSV.数据库名.dbo.表名 --导入示例 select * into 表 from ITSV.数据库名.dbo.表名 --以后不再使用时删除链接服务器 exec sp_dropserver 'ITSV ', 'droplogins ' --连接远程/局域网数据(openrowset/openquery/opendatasource) --1、openrowset --查询示例 select * from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) --生成本地表 select * into 表 from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) --把本地表导入远程表 insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) select *from 本地表 --更新本地表 update b set b.列A=a.列A from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地表 b on a.column1=b.column1 --openquery用法需要创建一个连接 --首先创建一个连接创建链接服务器 exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' --查询 select * FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ') --把本地表导入远程表 insert openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ') select * from 本地表 --更新本地表 update b set b.列B=a.列B FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ') as a inner join 本地表 b on a.列A=b.列A --3、opendatasource/openrowset SELECT * FROM opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ' ).test.dbo.roy_ta --把本地表导入远程表 insert opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ').数据库.dbo.表名 select * from 本地表 微软网站提供了一个生成库结构,表结构,及表中数据的工具,名称叫做Microsoft SQL Server Database Publishing Wizard 如果你不是使用VS2005、没有安装SQL Server2005你可能还需要安装其它组件:Microsoft SQL Server Native Client 下载地址:http://download.microsoft.com/download/a/c/3/ac37a75a-1e0b-49ba-aea1-0f9b258e4965/sqlncli.msiMicrosoft SQL Server 2005 Management Objects Collection 下载地址:http://download.microsoft.com/download/f/7/4/f74cbdb1-87e2-4794-9186-e3ad6bd54b41/SQLServer2005_XMO.msi最主要的,Database Publishing Wizard,下载地址:http://download.microsoft.com/download/2/1/b/21b68714-3d9a-4610-9eba-88509ffc27fb/DatabasePublishingWizard.msi select * into srvb.tb from srva.tb 哦 我是想把公网上的数据库的表全删除 再用这个将我内网的数据库还原上去 怎奈公网数据库是别人的服务器 没有还原的权限 用企业管理器又太慢了 因而想用编程实现----------------------------------------看起来属于DTS的范畴,不过,我自认为我自己写很难超过企业管理器的速度唯一的好处是可以自动化作业,而不必手工作业 我也想到要用 select * into 因为insert into 效率低 还不能建表但是 select * into table1 from table2因为是从内网复制数据 所以 table2的位置应该是内网表 用外网的连接字符串的时候table2是不能用openrowset访问内网数据库的这么说连接字符串一定要用内网连接字符串 那么table1需要用openrowset连接外网但是它提示“不存在table1” To:jxwangjm 我看了看DTS 没怎么看懂 好想先要用企业管理器保存DTS包 是不是很麻烦 每次不同的业务 都要做dts包呢? 大家看这条语句select * intoOPENDATASOURCE('SQLOLEDB','Data Source=ip;User ID=uid;Password=pwd').db1.user.try1 from try.dbo.try的错误:“在关键字 'OPENDATASOURCE' 附近有语法错误。”怎么改前提 1,连接字符串:本地; 2,以下select * fromOPENDATASOURCE('SQLOLEDB','Data Source=ip;User ID=uid;Password=pwd').db1.user.try 执行正确 1 建立远程表2 insert into t select * from .. to zefuzhang2008 :鉴于insert into效率太低,对于数据添加还行,备份还原数据库就不太好了我不想建表和复制数据分开完成 看看实在不行就算了 直接用dts.然后选择在sqlsever间复制对象和数据. to:fcuandy 你是说dtswiz.exe把 我是觉的每次都弄太浪费时间才选择sql语句实现的 这个功能好像没有用sql语句实现的,如果数据量大的话,会很慢的。建议直接的恢复数据库。(没有权限要呀) DTS除了可以用SQL语句操作外,也可以用VB等语言操作在企业管理器中用企业管理器选择保存为Visual Basic File,可以得到一个.Bas文件如果你是用VB的,那么看一下就应该知道了如果不是用VB的,那主要是通过调用dtspkg.dll其实俺也没用过 时间转换的问题 一个查询语句加了一个条件后就显示超时已过期,,有什么办法可以解决吗.. 一个SQL查询可以多个 可以自选 与 或 怎么把NTEXT转换成IMAGE类型 如何使用 sql server 2000 应用程序角色? 请教各位前辈一个问题! 关于索引的问题 用ado进行数据库查询的问题(简单问题) 请教表名为Column_{FE15EDE6-6535-49D9-B7E4-F855CD421689},在sql语句里如何查询? 哲学家就餐问题,为了防止死锁,通常用几个信号量就可以解决? sql语句 sql server 2005 的安装问题
exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 '
exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用户名 ', '密码 ' --查询示例
select * from ITSV.数据库名.dbo.表名 --导入示例
select * into 表 from ITSV.数据库名.dbo.表名 --以后不再使用时删除链接服务器
exec sp_dropserver 'ITSV ', 'droplogins ' --连接远程/局域网数据(openrowset/openquery/opendatasource)
--1、openrowset --查询示例
select * from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) --生成本地表
select * into 表 from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) --把本地表导入远程表
insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)
select *from 本地表 --更新本地表
update b
set b.列A=a.列A
from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地表 b
on a.column1=b.column1 --openquery用法需要创建一个连接 --首先创建一个连接创建链接服务器
exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 '
--查询
select *
FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')
--把本地表导入远程表
insert openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')
select * from 本地表
--更新本地表
update b
set b.列B=a.列B
FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ') as a
inner join 本地表 b on a.列A=b.列A --3、opendatasource/openrowset
SELECT *
FROM opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ' ).test.dbo.roy_ta
--把本地表导入远程表
insert opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ').数据库.dbo.表名
select * from 本地表
Microsoft SQL Server Native Client 下载地址:http://download.microsoft.com/download/a/c/3/ac37a75a-1e0b-49ba-aea1-0f9b258e4965/sqlncli.msiMicrosoft SQL Server 2005 Management Objects Collection 下载地址:http://download.microsoft.com/download/f/7/4/f74cbdb1-87e2-4794-9186-e3ad6bd54b41/SQLServer2005_XMO.msi最主要的,Database Publishing Wizard,下载地址:http://download.microsoft.com/download/2/1/b/21b68714-3d9a-4610-9eba-88509ffc27fb/DatabasePublishingWizard.msi
怎奈公网数据库是别人的服务器 没有还原的权限 用企业管理器又太慢了 因而想用编程实现----------------------------------------
看起来属于DTS的范畴,
不过,我自认为我自己写很难超过企业管理器的速度
唯一的好处是可以自动化作业,而不必手工作业
但是 select * into table1 from table2
因为是从内网复制数据 所以 table2的位置应该是内网表 用外网的连接字符串的时候table2是不能用openrowset访问内网数据库的
这么说连接字符串一定要用内网连接字符串 那么table1需要用openrowset连接外网但是它提示“不存在table1”
select * into
OPENDATASOURCE(
'SQLOLEDB',
'Data Source=ip;User ID=uid;Password=pwd'
).db1.user.try1
from try.dbo.try
的错误:
“在关键字 'OPENDATASOURCE' 附近有语法错误。”
怎么改
前提 1,连接字符串:本地;
2,以下
select * from
OPENDATASOURCE(
'SQLOLEDB',
'Data Source=ip;User ID=uid;Password=pwd'
).db1.user.try
执行正确
2 insert into t select * from ..
鉴于insert into效率太低,对于数据添加还行,备份还原数据库就不太好了
我不想建表和复制数据分开完成 看看实在不行就算了
你是说dtswiz.exe把 我是觉的每次都弄太浪费时间才选择sql语句实现的
建议直接的恢复数据库。(没有权限要呀)
在企业管理器中用企业管理器选择保存为Visual Basic File,可以得到一个.Bas文件
如果你是用VB的,那么看一下就应该知道了
如果不是用VB的,那主要是通过调用dtspkg.dll
其实俺也没用过