为什么这个存储的内容能一步步执行但就是不能一次全部执行通过呢?

cquyuyan 2008-03-30 08:58:53
create proc sp_InnerImport
(
@serverIP nvarchar(32)
)
as
begin
--一行一行执行下面的存储过程语句就是对的,可一起就是错的
set nocount on
if exists(select 1
from master.dbo.sysservers
where srvname='RemoteServer'
)
begin
exec sp_dropserver @server='RemoteServer',@droplogins='droplogins'
end
exec sp_addlinkedserver @server='RemoteServer',
@srvproduct='',
@provider='SQLOLEDB',
@datasrc='127.0.0.1'

exec sp_addlinkedsrvlogin @rmtsrvname='RemoteServer',
@useself='false',
@locallogin=null,
@rmtuser='sa',
@rmtpassword='zrx'
--总是在下面报错
--select * from RemoteServer.Test.dbo.abc
select *
FROM openquery(RemoteServer, 'SELECT * FROM Test.dbo.User ')

exec sp_dropserver @server='RemoteServer',@droplogins='droplogins'
end
go
...全文
90 点赞 收藏 15
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
cquyuyan 2008-03-30
[Quote=引用 1 楼 happyflystone 的回复:]
一般情况下linkserver是创建好了不删除的,方便再次调用
[/Quote]


我之所以这么做是因为我用下面的语句查出来的,如果不删除的话,关联远程服务器就不会变
select * from master.dbo.sysservers
回复
cquyuyan 2008-03-30
为什么用这句就是可以了呢?
exec('select * FROM openquery(RemoteServer,''SELECT * FROM Test.dbo.abc '')')
回复
cquyuyan 2008-03-30
我现在是这样写的,又可以F5反复创建存储过程了

if exists(select * from sysobjects where xtype='P' and name='sp_InnerImport')
drop proc sp_InnerImport
go

create proc sp_InnerImport
(
@serverIP nvarchar(32)
)
as
begin
set nocount on
if exists(select 1
from master.dbo.sysservers
where srvname='RemoteServer'
)
begin
exec sp_dropserver @server='RemoteServer',@droplogins='droplogins'
end
exec sp_addlinkedserver @server='RemoteServer',
@srvproduct='',
@provider='SQLOLEDB',
@datasrc=@serverIP

exec sp_addlinkedsrvlogin @rmtsrvname='RemoteServer',
@useself='false',
@locallogin=null,
@rmtuser='sa',
@rmtpassword='zrx'



--select * from RemoteServer.Test.dbo.abc
--select * FROM openquery(RemoteServer, 'SELECT * FROM Test.dbo.abc ')

--waitfor delay '00:00:05'
exec('select * FROM openquery(RemoteServer,''SELECT * FROM Test.dbo.abc '')')

exec sp_dropserver @server='RemoteServer',@droplogins='droplogins'
end
go



回复
-狙击手- 2008-03-30
稍稍延迟,保证linkserver创建成功呀
回复
-狙击手- 2008-03-30
waitfor delay '00:00:05'

改小


waitfor delay '00:00:02'
如果还慢但是结果 正常时


waitfor delay '00:00:01'
回复
cquyuyan 2008-03-30
create proc sp_InnerImport
(
@serverIP nvarchar(32)
)
as
begin
--一行一行执行下面的存储过程语句就是对的,可一起就是错的
set nocount on
if exists(select 1
from master.dbo.sysservers
where srvname='.'
)
begin
exec sp_dropserver @server='.',@droplogins='droplogins'
end
exec sp_addlinkedserver @server='RemoteServer',
@srvproduct='',
@provider='SQLOLEDB',
@datasrc='127.0.0.1'

exec sp_addlinkedsrvlogin @rmtsrvname='.',
@useself='false',
@locallogin=null,
@rmtuser='sa',
@rmtpassword='zrx'
--总是在下面报错
--select * from RemoteServer.Test.dbo.abc
waitfor delay '00:00:05'
exec('select *
FROM openquery(RemoteServer,''SELECT * FROM Test.dbo.User '')')

exec sp_dropserver @server='.',@droplogins='droplogins'
end
go




这个可以反复创建了, 但是,我在使用的时候总是显示正在执行批查询, 比刚才多花很长时间才能够出结果. 这又是为什么呢?

刚才只要能够创建成功就能够很快出结果,因为waitfor delay '00:00:05' 吗? 为什么要有这个语句?
回复
viva369 2008-03-30
或者你试试这样的写法


EXEC sp_addlinkedserver 'mbo-srv-05', N'SQL Server'
exec sp_addlinkedsrvlogin 'mbo-srv-05','false',null,'sa','Password01!';
exec ( 'use dmsdb select * from menu' )
at
[mbo-srv-05]

回复
viva369 2008-03-30
+go不会退出的,又不是return

存储过程一般是在你第一次调用的时候执行解析的。
回复
-狙击手- 2008-03-30
waitfor delay '00:00:05'
exec('select *
FROM openquery(RemoteServer,''SELECT * FROM Test.dbo.User '')')
---

这样也不对呀?
那是你的链接服务器没有先存在,你就select当然会报错的呀
回复
cquyuyan 2008-03-30
你们两位的办法都不对嘛,特别是viva369的,存储过程里都go了,就立即退出了,后面的查询是根本不能够执行的,

总之还是报那个错, 而且很奇怪的是, 我下楼打杯水过一会后就又能够重新创建成功了, 而且连续按F5都不报错, 但就在执行成功停几秒后再执行又开始报错了.这是怎么回事情呀??
回复
-狙击手- 2008-03-30
create proc sp_InnerImport 
(
@serverIP nvarchar(32)
)
as
begin
--一行一行执行下面的存储过程语句就是对的,可一起就是错的
set nocount on
if exists(select 1
from master.dbo.sysservers
where srvname='.'
)
begin
exec sp_dropserver @server='.',@droplogins='droplogins'
end
exec sp_addlinkedserver @server='RemoteServer',
@srvproduct='',
@provider='SQLOLEDB',
@datasrc='127.0.0.1'

exec sp_addlinkedsrvlogin @rmtsrvname='.',
@useself='false',
@locallogin=null,
@rmtuser='sa',
@rmtpassword='zrx'
--总是在下面报错
--select * from RemoteServer.Test.dbo.abc
waitfor delay '00:00:05'
exec('select *
FROM openquery(RemoteServer,''SELECT * FROM Test.dbo.User '')')

exec sp_dropserver @server='.',@droplogins='droplogins'
end
go


drop proc sp_InnerImport
回复
-狙击手- 2008-03-30
那是你没有先创建linkserver
回复
cquyuyan 2008-03-30
服务器: 消息 7202,级别 11,状态 2,过程 sp_InnerImport,行 27
在 sysservers 中未能找到服务器 'RemoteServer'。请执行 sp_addlinkedserver 以将服务器添加到 sysservers。
回复
viva369 2008-03-30


create proc sp_InnerImport
(
@serverIP nvarchar(32)
)
as
begin
--一行一行执行下面的存储过程语句就是对的,可一起就是错的
set nocount on
if exists(select 1
from master.dbo.sysservers
where srvname='RemoteServer'
)
begin
exec sp_dropserver @server='RemoteServer',@droplogins='droplogins'
end
exec sp_addlinkedserver @server='RemoteServer',
@srvproduct='',
@provider='SQLOLEDB',
@datasrc='127.0.0.1'

exec sp_addlinkedsrvlogin @rmtsrvname='RemoteServer',
@useself='false',
@locallogin=null,
@rmtuser='sa',
@rmtpassword='zrx'
--总是在下面报错 ,
--+go,批处理结束
go

--select * from RemoteServer.Test.dbo.abc
select *
FROM openquery(RemoteServer, 'SELECT * FROM Test.dbo.User ')

exec sp_dropserver @server='RemoteServer',@droplogins='droplogins'
end
go
回复
-狙击手- 2008-03-30
一般情况下linkserver是创建好了不删除的,方便再次调用


---try:


create proc sp_InnerImport 
(
@serverIP nvarchar(32)
)
as
begin
--一行一行执行下面的存储过程语句就是对的,可一起就是错的
set nocount on
if exists(select 1
from master.dbo.sysservers
where srvname='RemoteServer'
)
begin
exec sp_dropserver @server='RemoteServer',@droplogins='droplogins'
end
exec sp_addlinkedserver @server='RemoteServer',
@srvproduct='',
@provider='SQLOLEDB',
@datasrc='127.0.0.1'

exec sp_addlinkedsrvlogin @rmtsrvname='RemoteServer',
@useself='false',
@locallogin=null,
@rmtuser='sa',
@rmtpassword='zrx'
--总是在下面报错
--select * from RemoteServer.Test.dbo.abc
waitfor delay '00:00:05'
select *
FROM openquery(RemoteServer, 'SELECT * FROM Test.dbo.User ')

exec sp_dropserver @server='RemoteServer',@droplogins='droplogins'
end
go
回复
相关推荐
基于java的企业人事管理系统设计--软件工程课程设计(含源码与论文设计).rar 1 引言 4 1.1 课程设计目标 4 1.2 编程工具(编程环境)介绍 4 1.3 实施时间及主要实施步骤 4 2 需求分析 5 3 系统总体设计 6 4 数据库设计 6 5 主要功模块的设计与实现 10 5.1 功模块1详细设计(综合查询员工信息)..........................................................10 5.1.1 详细设计.......................................................................................................10 5.1.2 算法流程........................................................................................................15 5.1.3 界面设计及测试结果.....................................................................................15 6 调试分析 15 7 用户手册 16 8 测试结果 17 8.1 员工信息的添加...................................................................................................17 8.2 员工信息的修改...................................................................................................17 8.3 员工信息的删除...................................................................................................18 8.4 员工信息的综合查询...........................................................................................18 8.5 员工信息按性别统计的结果................................................................................19 8.6 员工信息按状态统计的结果...............................................................................19 8.7 员工信息按职称统计的结果................................................................................20 9 结论 20 10 参考文献 20
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

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