大家请帮帮忙,使用sp_addlinkedserver连接数据库的问题,在线等待。。。。立即给分

shellworld 2004-07-28 02:50:58
DECLARE @srv_link char(20)
DECLARE @login_name char(20)
DECLARE @login_pwd char(20)

SET @srv_link='192.168.3.199'
SET @login_name='sa'
SET @login_pwd = ''

exec sp_addlinkedserver @srv_link,'', 'SQLOLEDB', 'abc'
exec sp_addlinkedsrvlogin @srv_link,'false',null,@login_name,@login_pwd


EXEC('SELECT * INTO src_tb FROM ' + @srv_link + '.db1.dbo.tb')

exec sp_dropserver @srv_link, 'droplogins'

执行报错:

所影响的行数为 1 行)


(所影响的行数为 1 行)


(所影响的行数为 0 行)


(所影响的行数为 1 行)


(所影响的行数为 0 行)


(所影响的行数为 1 行)

服务器: 消息 170,级别 15,状态 1,行 1
第 1 行: '192.168' 附近有语法错误。

(所影响的行数为 1 行)


(所影响的行数为 1 行)

...全文
251 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
aht1979 2004-07-30
  • 打赏
  • 举报
回复
这个问题我刚解决,这种形式用addlinkedserver解决很麻烦,我用的openrowset解决的
这个存储过程的功能:许多客户端对应一个服务器端,客户端和服务器端都有各自的数据。但是服务器端负责统筹管理客户端,服务器端事先会生成一些店铺号(也就是存储过程里的@shoppe_id参数),客户选择其中一个向其注册,这时候根据店铺号从服务器端获取相应的详细信息插入客户端的数据库内,同时更新服务端内该店铺的可用状态(bos_shoppe内的shoppe_status),表示该店铺号已经被注册。在系统内店铺号这能注册或删除,因此删除操作是注册的反操作

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp_configLocal]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[sp_configLocal]
GO

create proc sp_configLocal @m_flag int,
@server_name varchar(50),
@uid varchar(50),
@pwd varchar(50),
@shoppe_id varchar(6)

as
declare @sql varchar(4000)
declare @qry varchar(4000)
declare @shoppe varchar(5)
begin
if @m_flag = 1 --判断是否已经设置过
begin
if exists(select * from bos_sys where status=1)
return 1
else
return 0
end
if @m_flag = 2
begin
select * from bos_sys where status = 1
end
if @m_flag = 3
begin
select shoppe_id from SaleMarket.dbo.bos_shoppe where shoppe_status = 0 and status = 1 order by shoppe_id
end
if @m_flag = 4
begin
begin tran del_sys
--将本地设置表里的数据清空
delete from bos_sys
if @@error > 0
begin
rollback tran del_sys
return -100
end
--判断临时表是否存在,如存在则删除之
if exists(select * from sysobjects where id = object_id('afc') and objectproperty(id,N'ISUserTable') = 1)
begin
drop table afc
if @@error > 0
begin
rollback tran del_sys
return -100
end
end
commit tran del_sys

--从服务器查询用户所选店铺号对应的详细信息
set @qry = 'select a.shoppe_id,a.shoppe_name,a.shoppe_father ,a.shoppe_provider,a.iscasher,a.iskucun,a.ismod,getdate() as back_lastdate,a.status
from SaleMarket.dbo.bos_shoppe a where status = 1 and a.shoppe_id = '+''''''+@shoppe_id+''''''
set @sql = ' select a.* into afc from OPENROWSET(''SQLOLEDB'','+''''+@server_name+''''+';'+''''+@uid+''''+';'+''''+@pwd+''''+','+''''+@qry+''''+') as a'
--将其信息插入客户端数据库
exec(@sql)
if @@error > 0
begin
return -100
end
--更新服务器端的shoppe_status
set @sql = 'update openrowset(''SQLOLEDB'','+''''+@server_name+''''+';'+''''+@uid+''''+';'+''''+@pwd+''''+',SaleMarket.dbo.bos_shoppe) set shoppe_status = 1 where shoppe_id = '+''''+@shoppe_id+'''' +'and status = 1'
exec(@sql)
if @@error > 0
begin
return -100
end
begin tran save_sys
--将客户端临时表内的数据导入bos_sys
insert into bos_sys
select top 1 a.*,null,null,null from afc a order by shoppe_id
if @@error > 0
begin
rollback tran save_sys
return -100
end
--删除临时表
drop table afc
if @@error > 0
begin
rollback tran save_sys
return -100
end
commit tran save_sys

select * from bos_sys where status = 1
return 100
end
if @m_flag = 5 --删除本地设置
begin
set @sql = 'update openrowset(''SQLOLEDB'','+''''+@server_name+''''+';'+''''+@uid+''''+';'+''''+@pwd+''''+',SaleMarket.dbo.bos_shoppe) set shoppe_status = 0 where shoppe_id = '+''''+@shoppe_id+'''' +'and status = 1'
exec(@sql)
if @@error > 0
begin
return -100
end
--将本地设置表里的数据清空
delete from bos_sys
if @@error > 0
begin
return -100
end
select * from bos_sys where status = 1
return 100
end
end
haoK 2004-07-29
  • 打赏
  • 举报
回复
EXEC('SELECT * INTO src_tb FROM ' + @srv_link + '.db1.dbo.tb')

这句改一下

EXEC('SELECT * INTO src_tb FROM [' + @srv_link + '].db1.dbo.tb')

ip的形式不符合命名要求 点太多:)
pbsql 2004-07-29
  • 打赏
  • 举报
回复
一样的可以变量:
DECLARE @srv_link varchar(20)
DECLARE @login_name varchar(20)
DECLARE @login_pwd varchar(20)

SET @srv_link='192.168.3.199'
SET @login_name='sa'
SET @login_pwd = ''

exec('
SELECT *
FROM OPENDATASOURCE(
''SQLOLEDB'',''Data Source='+@srv_link+';User ID='+@login_name+';Password="'+@login_pwd+'"''
).Northwind.dbo.Categories
')
shellworld 2004-07-28
  • 打赏
  • 举报
回复
这个也是一样涉及到变量的问题,servername, myuid,mypass使用变量的话怎么表达呀???
pbsql 2004-07-28
  • 打赏
  • 举报
回复
那你不如用下面这样的格式:
SELECT *
FROM OPENDATASOURCE(
'SQLOLEDB',
'Data Source=ServerName;User ID=MyUID;Password=MyPass'
).Northwind.dbo.Categories
shellworld 2004-07-28
  • 打赏
  • 举报
回复
网络情况限制,使用IP比较方便,有其他方法可以使用IP来执行吗??
pbsql 2004-07-28
  • 打赏
  • 举报
回复
SET @srv_link='192.168.3.199'--我的意思是这里用名称而非IP
mfc2003 2004-07-28
  • 打赏
  • 举报
回复
up
shellworld 2004-07-28
  • 打赏
  • 举报
回复
可是我的srv_link不是固定的,需要使用变量,而不能使用常量。
pbsql 2004-07-28
  • 打赏
  • 举报
回复
不能这样:
EXEC('SELECT * INTO src_tb FROM 192.168.3.199.db1.dbo.tb')

改为名称试试:EXEC('SELECT * INTO src_tb FROM srv.db1.dbo.tb')
--假设192.168.3.199名称是srv
内容概要:本文档是2025年全国广播电视技术能手竞赛IPTV专业的竞赛内容大纲,旨在指导参赛选手准备比赛。竞赛为理论和实操两大部。理论部涵盖基本知识、基础理论和专业知识,包括法律法规、技术标准、IPTV技术基础、信号传输与发、网络和数据安全等。实操部则涉及IPTV系统设备、仪器设备的操作使用和指标测量。具体内容包括IPTV系统架构、传输技术与指标、设备配置及维护、专业技能如测量工具使用、视音频指标测量、直播点播协议析、播出网络性能测量、网络安全数据析以及系统故障排查等。 适合人群:从事或有意从事IPTV相关工作的技术人员,尤其是有志于参加全国广播电视技术能手竞赛的专业人士。 使用场景及目标:①帮助参赛选手全面了解并掌握IPTV相关的法规文件和技术标准;②提升选手对IPTV系统架构、传输技术和设备配置的理解;③增强选手在实际操作中的测量、析和故障排查能力;④确保选手能够熟练运用各种测量工具和析软件进行视音频指标测量和网络安全数据析。 阅读建议:由于文档内容详尽且专业性强,建议读者在学习过程中结合实际案例和操作练习,同时参考相关技术文献,以便更好地理解和掌握竞赛所需的知识和技能。

27,582

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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