帮忙看一下 存储过程! 谢谢!

duzidengdai521 2008-11-17 12:14:04
我写的这个存储过程的意思是:想把在本地旧表中的数据导入到远程的新表中。且导入的数据不要重复。
好像我下面写的远程连接有问题 。
应该怎么写连接远程的数据库啊? 谢谢!











CREATE PROCEDURE peoplechange
AS
begin
declare @sqlStr varchar(5000)
declare @oldBaseName varchar(50)
declare @newBaseName varchar(50)

set @oldBaseName= 'icme'
set @newBaseName='icme2'


begin


--创建链接服务器
exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '192.168.7.143 '
exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, 'sa ', ''


--删除单位表

select @sqlStr =' delete from '+@oldBaseName+'..单位表 '

select @sqlStr =@sqlStr +' where 单位编号 in(select 单位编号 from openrowset( ''SQLOLEDB '', ''192.168.7.143 ''; ''sa ''; '' '','+@newBaseName+'..单位表)'
exec(@sqlStr)


end
end
...全文
65 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
幸运的意外 2008-11-17
建立了远程数据服务器连接了,就不用再openrowset吧,直接用服务器别名.数据库名.用户名.单位表引用就可以了呀.
试试看看吧,楼主,祝你成功.
回复
-狙击手- 2008-11-17
--创建链接服务器
exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '192.168.7.143 '
exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, 'sa ', ''

---

1、创建一次就行了,不要放在过程里
2、你创建了没有使用链接服务器,看不懂你想做什么 
3、insert into icme..单位表select * from from openrowset( 'SQLOLEDB ', '192.168.7.143'; 'sa '; '','icme2..单位表) a
where not exists( select 1 from 单位表 where a.id = id)
回复
zjcxc 元老 2008-11-17
建立了链接服务器怎么还用 openrowset?
回复
水族杰纶 2008-11-17
不同服务器数据库之间的数据操作

--创建链接服务器
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
--把本地表导入远程表
回复
duzidengdai521 2008-11-17

想把在本地旧表中的数据导入到远程的新表中。且导入的数据只在旧表中不在新表中的数据。
您看一下我的创建连接服务器 和 存储过程有问题吗? 谢谢了啊 着急啊 老总催那!







--创建链接服务器
exec sp_addlinkedserver 'ITSV ', '', 'SQLOLEDB', '192.168.7.143 '
exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, 'meiguibao','meiguibao'

/*CREATE PROCEDURE peoplechange
AS
begin
declare @sqlStr varchar(5000)
declare @oldBaseName varchar(50)
declare @newBaseName varchar(50)

set @oldBaseName= 'icme'
set @newBaseName='icme2'



begin

--删除单位表

select @sqlStr =' delete from '+@oldBaseName+'..单位表 '

select @sqlStr =@sqlStr +' where 单位编号 in(select 单位编号 from ITSV.'+@newBaseName+'.sa.单位表)'
exec(@sqlStr)


end
end*/
回复
linguojin11 2008-11-17
insert into newservername.database.dbo.tablename1
select distinct * from table
回复
linguojin11 2008-11-17
把你错误贴出来看下。。
--删除单位表

select @sqlStr =' delete from '+@oldBaseName+'..单位表 '

select @sqlStr =@sqlStr +' where 单位编号 in(select 单位编号 from openrowset( ''SQLOLEDB '', ''192.168.7.143 ''; ''sa ''; '' '','+@newBaseName+'..单位表)'
exec(@sqlStr)


你上面这代码作用是? 你不是说要复制不重复的数据吗
回复
duzidengdai521 2008-11-17
还是不行啊 请大哥们谁能帮忙写一下啊
回复
wangyunfei921 2008-11-17
建立了远程数据服务器连接,直接用服务器别名.数据库名.用户名.单位表引用就可以!
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-11-17 12:14
社区公告
暂无公告