系統升級到SQL SERVER 2017用了一段時間,u890系統年結時報錯,檢查發現有個語法在2008r2不報錯,但在sql server2012以上版本都報錯,想臨時把資料庫降到2008r2,資料庫有上百G,網上介紹的方法都是匯出腳本,然后再執行,這種方法肯定不可行,不知還有無其他好招?如果有好辦法可以出點費用解決。
uj5u.com熱心網友回復:
嘗試一下直接調整兼容級別,如果這個搞不定,那就只能導資料到 2008 了ALTER DATABASE database_name
SET COMPATIBILITY_LEVEL = 100
當然,如果陳述句能夠改得到,還是建議改陳述句
uj5u.com熱心網友回復:
兼容級別本來就是100,因為是從舊庫升級來的,默認是100,可淘寶有賣家說可以升,還說不是導腳本的方式uj5u.com熱心網友回復:
用友U890的sql只支持sql2000,sql2005與sql2008uj5u.com熱心網友回復:
是的,2018年年結時是年結完再升級到sql server 2017的,所以問題今年年結才碰到uj5u.com熱心網友回復:
請問詳細的報錯資訊是什么? 對應的SQL語法也貼一下?uj5u.com熱心網友回復:
其實匯出-匯入資料沒你想的那么困難, 不要用SQL腳本的方式, 可以通過匯入工具或鏈接服務器傳資料,只要網路良好和兩邊服務器IO性能ok, 應該沒什么問題.
uj5u.com熱心網友回復:
腳本類似這樣的: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是不報錯的,可以隨便測驗將表名換一下
uj5u.com熱心網友回復:
剛在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.
*/
uj5u.com熱心網友回復:
建議應如下寫法, 在表名后加上別名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')
uj5u.com熱心網友回復:
感謝版主的耐心解答,我剛重新測驗,為何我測驗在2008r2是支持那種寫法,而版本驗證是不支持,是因為我本地有很多資料庫,有些庫是從老版本升上來的,默認的兼容級別有80和90的,sql server 2008r2對應的是100,而新建資料庫都是100的兼容級別,經測驗在90和100兼容級別是不支持的,說明這種寫法是sqlserver2000的寫法。如果是我自己的程式,加上別名就可以搞掂,可這是用友u890年結工具的代碼,改不了它。麻煩。
uj5u.com熱心網友回復:
建議咨詢軟體提供商, 應有解決方案.uj5u.com熱心網友回復:
資料庫好像降不了級吧uj5u.com熱心網友回復:
交給別人做,那不管是什么方法,能做到就行,你不喜歡用導腳本的,那就告訴你不是用導腳本的方式就行嘛
比如我用 BCP,用 SSIS,都不是導腳本,我自己寫個腳本處理,也可以告訴你不是導腳本
所以方法不重要,重要的是不支持直接降級
uj5u.com熱心網友回復:
可以嘗試聯系用友,看看能不能弄個新版本,最好是能夠軟體升級,畢竟2000的那個寫法也太古老了uj5u.com熱心網友回復:
多謝老大們的回復,我先對整個庫所有表進行了清理,對于記錄數大的有些不需要的歷史資料在這次遷移程序中過濾掉,一些臨時表打上不同步標識,留在歷史庫,然后寫了個腳本處理資料同步的,對于有外鍵約束的洗掉外鍵,有自增長列的,停用自增長,有觸發器的停觸發器,然后同步資料,同步完再恢復逐一恢復,發現有個別表,它的外鍵是有多級關聯的,需要遞回把它洗掉,我不是用nocheck去禁用外鍵,如果是nocheck的方法 不能用truncate table ,用delete慢了很多,不知大家手上有無遞回洗掉外鍵的代碼,有的話發一段用一下,感謝!uj5u.com熱心網友回復:
這個舊版本的用友不再支持了,打了兩個年結補丁解決不了,現在考慮的就是腳本同步資料庫的方式解決。uj5u.com熱心網友回復:
個人認為直接降級更簡單如果只是年結功能有問題,也可以考慮找臺電腦裝回之前的版本,降低后使用年結功能做年結,用 profile 跟蹤出所有的處理操作,自己把這個腳本整理后寫成新版本可用的存盤程序,然后自己寫個小程式替代年結功能
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/77740.html
標籤:疑難問題
上一篇:請教各位大佬怎么解決問題
