SqlServer远程执⾏存储过程或其他⾮DML语句 原本服务器有1个链接服务器,这是建⽴发布订阅时创建的,创建命令导出如下(都为同⼀域中的计算机): EXEC master.dbo.sp_addlinkedserver
@server = N'LinkServerName',
@srvproduct=N'SQL Server'
GO
EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname=N'LinkServerName',
@useself=N'True',
@locallogin=NULL,
@rmtuser=NULL,
@rmtpassword=NULL
GO
该链接服务器可以进⾏远程查询,但是调⽤远程存储过程执⾏命令时出错:
本体感受器EXEC [LinkServerName].[DB].DBO.SP_EXECUTESQL N'GRANT SELECT,INSERT,UPDATE,DELETE,REFERENCES ON [AAAAA] TO [username]'
消息 18483,级别 14,状态 1,第 1 ⾏ 由于没有在服务器 'LinkServerName' 上将 '' 定义为远程登录名,所以⽆法连接到该服务器。请确保指定的登录名正确⽆误。。
查看服务器信息:
萧红的女儿高庆狮SELECT name,product,provider,data_source,is_linked,is_remote_proc_transaction_promotion_enabled FROM sys.servers
@srvproduct=N'SQL Server' ⽆法远程执⾏,现在换⼀种接⼝类型。
EXEC master.dbo.sp_droplinkedsrvlogin [LinkServerName],Null
簧 片EXEC master.dbo.sp_dropserver [LinkServerName]
GO
EXEC master.dbo.sp_addlinkedserver
湖北经视故事会@server = N'LinkServerName',
@srvproduct=N'',
@provider='SQLNCLI',
@datasrc='ServerName or IP'
GO
EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname=N'LinkServerName',
@useself=N'True',
@locallogin=NULL,
@rmtuser=NULL,
@rmtpassword=NULL
GO
再执⾏远程存储过程,错误如下:
消息 7411,级别 16,状态 1,第 1 ⾏
未将服务器 'DB03' 配置为⽤于 RPC。
开启 RPC 远程过程调⽤:
EXEC master.dbo.sp_serveroption @server=N'LinkServerName', @optname=N'rpc', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'LinkServerName', @optname=N'rpc out', @optvalue=N'true'
不可在界⾯上启⽤RPC,否则报错:
不允许对系统⽬录进⾏即席更新。(Microsoft SQL Server , 错误:259)
好了,现在再执⾏:
EXEC [LinkServerName].[DB].DBO.SP_EXECUTESQL N'GRANT SELECT,INSERT,UPDATE,DELETE,REFERENCES ON [AAAAA] TO [username]'命令执⾏成功!
科洛奇尼附:⼏种远程查询
SELECT * FROM [LinkServerName].[DB].dbo.AAAAA
SELECT * FROM OPENQUERY([LinkServerName],'SELECT * FROM DB.dbo.AAAAA')
SELECT * FROM OPENDATASOURCE('SQLNCLI','Data Source=;Integrated Security=SSPI').DB.dbo.AAAAA
SELECT * FROM OPENROWSET('SQLNCLI','Server=ServerName;Trusted_Connection=yes;','SELECT * FROM DB.dbo.AAAAA') AS a;
参考: 、、