求SQL SERVER 2017降级 2008R2方法

netghost 2020-01-03 09:10:28
系统升级到SQL SERVER 2017用了一段时间,u890系统年结时报错,检查发现有个语法在2008r2不报错,但在sql server2012以上版本都报错,想临时把数据库降到2008r2,数据库有上百G,网上介绍的方法都是导出脚本,然后再执行,这种方法肯定不可行,不知还有无其他好招?如果有好办法可以出点费用解决。
...全文
539 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 2020-01-08
  • 打赏
  • 举报
回复
个人认为直接降级更简单
如果只是年结功能有问题,也可以考虑找台电脑装回之前的版本,降低后使用年结功能做年结,用 profile 跟踪出所有的处理操作,自己把这个脚本整理后写成新版本可用的存储过程,然后自己写个小程序替代年结功能
netghost 2020-01-08
  • 打赏
  • 举报
回复
这个旧版本的用友不再支持了,打了两个年结补丁解决不了,现在考虑的就是脚本同步数据库的方式解决。
netghost 2020-01-08
  • 打赏
  • 举报
回复
多谢老大们的回复,我先对整个库所有表进行了清理,对于记录数大的有些不需要的历史数据在这次迁移过程中过滤掉,一些临时表打上不同步标识,留在历史库,然后写了个脚本处理数据同步的,对于有外键约束的删除外键,有自增长列的,停用自增长,有触发器的停触发器,然后同步数据,同步完再恢复逐一恢复,发现有个别表,它的外键是有多级关联的,需要递归把它删除,我不是用nocheck去禁用外键,如果是nocheck的方法 不能用truncate table ,用delete慢了很多,不知大家手上有无递归删除外键的代码,有的话发一段用一下,感谢!
zjcxc 2020-01-07
  • 打赏
  • 举报
回复
可以尝试联系用友,看看能不能弄个新版本,最好是能够软件升级,毕竟2000的那个写法也太古老了
zjcxc 2020-01-07
  • 打赏
  • 举报
回复
引用 2 楼 netghost 的回复:
兼容级别本来就是100,因为是从旧库升级来的,默认是100,可淘宝有卖家说可以升,还说不是导脚本的方式

交给别人做,那不管是什么方法,能做到就行,你不喜欢用导脚本的,那就告诉你不是用导脚本的方式就行嘛
比如我用 BCP,用 SSIS,都不是导脚本,我自己写个脚本处理,也可以告诉你不是导脚本
所以方法不重要,重要的是不支持直接降级
xiaoxiangqing 2020-01-07
  • 打赏
  • 举报
回复
数据库好像降不了级吧
唐诗三百首 2020-01-06
  • 打赏
  • 举报
回复
建议咨询软件提供商, 应有解决方案.
netghost 2020-01-06
  • 打赏
  • 举报
回复
感谢版主的耐心解答,我刚重新测试,为何我测试在2008r2是支持那种写法,而版本验证是不支持,是因为我本地有很多数据库,有些库是从老版本升上来的,默认的兼容级别有80和90的,sql server 2008r2对应的是100,而新建数据库都是100的兼容级别,经测试在90和100兼容级别是不支持的,说明这种写法是sqlserver2000的写法。 如果是我自己的程序,加上别名就可以搞掂,可这是用友u890年结工具的代码,改不了它。麻烦。
唐诗三百首 2020-01-04
  • 打赏
  • 举报
回复
建议应如下写法, 在表名后加上别名a和b, SQL不报错, 也方便阅读.

select a.ctablecode
 From hr_sys_setdict a, UFDATA_168_2019.dbo.hr_sys_setdict b
 where a.ctablecode like 'hr_ct%' 
 and a.ctablecode = b.ctablecode 
 and a.ctablecode not in(select distinct name from sysobjects where name like 'hr_ct%' and xtype='V')
唐诗三百首 2020-01-04
  • 打赏
  • 举报
回复
刚在SQL2008 R2环境测试LZ的SQL脚本,会报错的喔,

-- 确认数据库环境
select @@version   
--> 返回Microsoft SQL Server 2008 R2 (SP3) - 10.50.6000.34 (X64)...


-- 打开master数据库
use master

-- 创建表master.dbo.hr_sys_setdict
create table hr_sys_setdict(ctablecode varchar(50))


-- 创建数据库UFDATA_168_2019
create database UFDATA_168_2019

-- 打开UFDATA_168_2019数据库
use UFDATA_168_2019

-- 创建表UFDATA_168_2019.dbo.hr_sys_setdict
create table hr_sys_setdict(ctablecode varchar(50))


-- 打开master数据库
use master

-- 执行查询
select hr_sys_setdict.ctablecode
 From hr_sys_setdict, UFDATA_168_2019.dbo.hr_sys_setdict 
 where hr_sys_setdict.ctablecode like 'hr_ct%' 
 and hr_sys_setdict.ctablecode = UFDATA_168_2019.dbo.hr_sys_setdict.ctablecode 
 and hr_sys_setdict.ctablecode not in(select distinct name from sysobjects where name like 'hr_ct%' and xtype='V')

/*
Msg 1013, Level 16, State 1, Line 19
The objects "UFDATA_168_2019.dbo.hr_sys_setdict" and "hr_sys_setdict" in the FROM clause have the same exposed names. 
Use correlation names to distinguish them.
*/
netghost 2020-01-03
  • 打赏
  • 举报
回复
脚本类似这样的:
 select hr_sys_setdict.ctablecode From hr_sys_setdict, UFDATA_168_2019.dbo.hr_sys_setdict where hr_sys_setdict.ctablecode like 'hr_ct%' and hr_sys_setdict.ctablecode = UFDATA_168_2019.dbo.hr_sys_setdict.ctablecode and hr_sys_setdict.ctablecode not in(select distinct name from sysobjects where name like 'hr_ct%' and xtype='V')

报错的信息是这样的:
消息 1013,级别 16,状态 1,第 1 行
FROM 子句中的对象 "UFDATA_168_2019.dbo.hr_sys_setdict" 和 "hr_sys_setdict" 具有相同的表现名称。请使用相关名称来区分它们。

上面这个脚本在sql server 2008r2是不报错的,可以随便测试将表名换一下
netghost 2020-01-03
  • 打赏
  • 举报
回复
兼容级别本来就是100,因为是从旧库升级来的,默认是100,可淘宝有卖家说可以升,还说不是导脚本的方式
zjcxc 2020-01-03
  • 打赏
  • 举报
回复
尝试一下直接调整兼容级别,如果这个搞不定,那就只能导数据到 2008 了
ALTER DATABASE database_name
SET COMPATIBILITY_LEVEL = 100
当然,如果语句能够改得到,还是建议改语句
唐诗三百首 2020-01-03
  • 打赏
  • 举报
回复
其实导出-导入数据没你想的那么困难, 不要用SQL脚本的方式, 可以通过导入工具或链接服务器传数据, 只要网络良好和两边服务器IO性能ok, 应该没什么问题.
唐诗三百首 2020-01-03
  • 打赏
  • 举报
回复
请问详细的报错信息是什么? 对应的SQL语法也贴一下?
netghost 2020-01-03
  • 打赏
  • 举报
回复
是的,2018年年结时是年结完再升级到sql server 2017的,所以问题今年年结才碰到
饮水需思源 2020-01-03
  • 打赏
  • 举报
回复
用友U890的sql只支持sql2000,sql2005与sql2008

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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