SQL Server Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 无法在事务中执行过程

本人是SpringBoot项目 使用MyBatis 连接SQL Server

在执行一个存储过程的时候报错:

"报错发生在 :ExceptionFactory.java 类中的 wrapException 方法中的第 30 行!原因是 :\n\r\n### Error querying database.  Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 无法在事务中执行过程 'sys.sp_dropserver'。\r\n### The error may exist in com/xxx/product/dc/dao/dao1/DxDxttSourceDao.java (best guess)\r\n### The error may involve com.xxx.product.dc.dao.dao1.DxDxttSourceDao.findInfo-Inline\r\n### The error occurred while setting parameters\r\n### SQL: {call dbo.etl_aa_xx_test(?,?,?,?,?,?)}\r\n### Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 无法在事务中执行过程 'sys.sp_dropserver'。"

网上找了半天没找到原因和解决办法;

查看了存储过程里面都是操作master.dbo.sp_addlinkedserver、master.dbo.sp_addlinkedsrvlogin、sp_serveroption、sp_testlinkedserver。看来是要创建链接服务器。
 

--执行执行存过语句
EXEC etl_xxxoxx_test 'name','SQLOLEDB','XXX.XXX.XXX.3','saXXX','doctorXXXX751','';


-- 这条语句会返回所有被标记为链接服务器的记录,也就是那些在 SQL Server 实例中配置为链接其他服务器的服务器信息
SELECT * FROM sys.servers WHERE is_linked = 1;

--添加链接服务器
EXEC master.dbo.sp_addlinkedserver @server = 'name', @srvproduct='name', @provider='SQLOLEDB', @datasrc='XXX.XXX.XXX.3';
--配置链接服务器的登录信息
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname= 'name',@locallogin=NULL,@useself='False',@rmtuser= 'saXXX',@rmtpassword= 'doctorXXXX751'; 

--配置服务器选项
EXEC sp_serveroption @server='name' , @optname= 'rpc', @optvalue ='TRUE';
--配置服务器选项
EXEC sp_serveroption @server='name' , @optname= 'rpc out', @optvalue='TRUE';
--测试链接服务器
EXEC sp_testlinkedserver N'name';
--删除链接服务器
exec sp_dropserver 'name','droplogins';   

于是乎我就自己用SQL Sserver Manager把执行过程一条一条的执行;

发现数据库可以执行,但为啥程序里执行报错呢。怀疑是权限问题,最后使用了程序里配置的数据库账号和密码重新登录数据库发现执行语句报了一样的错:

Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 无法在事务中执行过程 'sys.sp_dropserver'。"

原来我执行成功的是使用的sa的权限,他有SQL Server的执行master库相关权限,而程序里配置的没有执行master库相关权限。破案

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值