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
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
解决方案 »
- 关于多表修改
- 如何把两个字段不同时相同的记录ID号查出来?
- 怎么写这样的sql语句或者函数,返回极端值
- 如何将 字符串"srv_CDCA.huadu.dbo.A_Affirm" 转化为一对象??如:select * from 函数('srv_CDCA.huadu.dbo.A_Affirm')
- 为什么同样一段sql语句,直接在企业管理器中查询非常快,而在asp中却速度很慢?
- Sql server2000里建的库为什么过了一段时间变的非常大?
- 有关相同时间的查询
- 存储过程作为sql语句的选择的列,如何写?
- 谁会想到(Image类型)的这个问题?
- sql server的问题
- 请问在同一个表中,用其中一列的值去修改另一列的语法是怎样的?
- 是否SQL server2000不能在Windows2003 Server上安装
use 数据库B
go
create procedure test @row int output
as
insert 表B(字段列表) select 字段列表 from 服务器.数据库A..表A
set @row = @@rowcount
'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
对于存储过程,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...
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
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