解决版本:3.0.6
原因分析:mybatis-plus默认使用Jdbc3KeyGenerator进行添加,但是sqlserver不支持批量返回id,所以会抛出如下异常
解决方案: 重写默认saveBatch和saveOrUpdateBatch(缺点是批量添加不能返回id,对于不需要返回id的场景适用)将Jdbc3KeyGenerator替换为NoKeyGenerator
第一步: 建立NoahSqlMethod(也可以不写,但是项目尽量不出现魔法值)
第二步: 建立InsertBatch对象
第三步: 建立NoahSqlInjector对象
第四步: 重写ServiceImpl超类为AbstractNoahServiceImpl
第五步: 将业务service继承类改为AbstractNoahServiceImpl
第六步: 将SqlInjector注入系统中
用EXEC执行字符串的形式就可以!如下:
DECLARE @databaseName NVARCHAR(20)
DECLARE @deviceName NVARCHAR(30)
DECLARE @SQL NVARCHAR(1000)
SET @databaseName = 'table'
SET @deviceName = @databaseName + '_device'
SET @SQL='ALTER DATABASE ' + @databaseName + ' SET SINGLE_USER WITH ROLLBACK IMMEDIATE'
EXEC ( @SQL)
SET @SQL='RESTORE database ' + @databaseName + ‘ FROM @deviceName WITH RECOVERY’
EXEC ( @SQL)
在一个查询语句里,不能有重名的参数。在第一个图里循环添加了几次name参数,所以报错。而且你这么写也达不批量写入的目的,因为你只执行了一次插入 *** 作。解决方法一,把最后一句代码放到for循环里,在后面再加一句lsp.Clear()
方法二,sqlserver批量写入可以使用SqlBulkCopy来做,一条一条插性能太差
如用不懂,欢迎追问
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)