建立这样一个存储过程!在线等。

sabrinla 2003-10-31 01:59:18
1:)把其他服务器上的数据库A的表A的某些字段的记录插入(或更新)本服务器的数据库B的表B中。
2:)这个存储过程返回插入记录数和更新记录数。
...全文
63 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 元老 2003-10-31
  • 打赏
  • 举报
回复
--如果这种操作经常进行,最好创建连接其他服务器的链接服务器:

exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','服务器名'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'sa'
go


然后存储过程就可以改为:
create proc p_update
as
declare @re int
update b..b set 列1=b.列1
from b..b b inner join srv_lnk.a..a b on a.id=b.id
set @re=@@rowcount
insert into b..b select * from srv_lnk.a..a a where a.id not in(select id from b..b)
set @re=@@rowcount+@re
go
zjcxc 元老 2003-10-31
  • 打赏
  • 举报
回复
create proc p_update
as
declare @re int
update b..b set 列1=b.列1
from b..b b inner join(select * from openrowset('SQLOLEDB','其他服务器名';'sa';'',a..a) b on a.id=b.id
set @re=@@rowcount
insert into b..b select * from openrowset('SQLOLEDB','其他服务器名';'sa';'',a..a) a where a.id not in(select id from b..b)
set @re=@@rowcount+@re
go


--调用示例:
declare @re int
exec @re=p_update
select 处理记录数=@re
pengdali 2003-10-31
  • 打赏
  • 举报
回复
请在查询分析器中创建这个存储过程,以后这个存储过程在企业管理和查询分析器都能修改了。

对于存储过程,SQL Server 使用最初创建存储过程时的 SET ANSI_NULLS 设置值。无论随后何时执行存储过程,SET ANSI_NULLS 的设置都还原为其最初使用的值并生效。当在存储过程内唤醒调用 SET ANSI_NULLS 时,其设置不更改。

在执行分布式查询时应将 SET ANSI_NULLS 设置为 ON。

在执行分布式查询时应将 ANSI_WARNINGS 设置为 ON。

企业管理中的ANSI_NULLS和ANSI_WARNINGS选项不对,但没有方法改动。在查询分析器可以设置ANSI_NULLS和ANSI_WARNINGS选项,而且默认值是对的。所以能在查询分析器创建此类存储过程,而不能在企业管理器创建此类存储过程。

就是:
create proc 名
as
SET ANSI_NULL_DFLT_ON on --注意
SET ANSI_WARNINGS on

select * from open...
pengdali 2003-10-31
  • 打赏
  • 举报
回复
select * into 本地库名..表名 from OPENDATASOURCE(
'SQLOLEDB',
'Data Source=远程ip;User ID=sa;Password=密码'
).库名.dbo.表名

insert 本地库名..表名 select * from OPENDATASOURCE(
'SQLOLEDB',
'Data Source=远程ip;User ID=sa;Password=密码'
).库名.dbo.表名

或使用联结服务器:
EXEC sp_addlinkedserver '别名','','MSDASQL',NULL,NULL,'DRIVER={SQL Server};SERVER=远程名;UID=用户;PWD=密码;'
exec sp_addlinkedsrvlogin @rmtsrvname='别名',@useself='false',@locallogin='sa',@rmtuser='sa',@rmtpassword='密码'
GO
然后你就可以如下:
select * from 别名.库名.dbo.表名
insert 库名.dbo.表名 select * from 别名.库名.dbo.表名
select * into 库名.dbo.新表名 from 别名.库名.dbo.表名
go
txlicenhe 2003-10-31
  • 打赏
  • 举报
回复
2:
use 数据库B
go
create procedure test @row int output
as
insert 表B(字段列表) select 字段列表 from 服务器.数据库A..表A
set @row = @@rowcount
txlicenhe 2003-10-31
  • 打赏
  • 举报
回复
1:联结服务器
EXEC sp_addlinkedserver
'Test', --名称
'',
'MSDASQL',
NULL,
NULL,
'DRIVER={SQL Server};SERVER=服务器名;UID=sa;PWD=密码;'
GO
-------以上为添加连接服务器

exec sp_addlinkedsrvlogin 'test','false','sa','sa',''



2:
use 数据库B
go
create procedure test @row int
as
insert 表B(字段列表) select 字段列表 from 服务器.数据库A..表A
set @row = @@rowcount

34,874

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧