一、概述
在軟體實施過程中,我遇到了這麼乙個問題,我在客戶那邊安裝了整個erp程式並且向資料庫中匯入了客戶提供給我的基礎資料,程式進入試執行階段,在試執行期間,客戶反映出程式的各種問題,需要提交給公司去糾正這些問題,在糾正問題的時候伴隨的問題的解決,程式開發人員向資料庫中新增了資料庫表或者向已有表中新增了字段,這個時候開發員沒有乙個良好的習慣用sql語法來操作這些新增,而是直接在資料庫設計器中新增,在實施人員給客戶更新程式的時候需要重新還原資料庫,導致之前已經匯入的基礎資料需要重新做處理,做了重複工作量,我作為乙個實施人員為了讓自己工作更輕鬆,編寫了這麼乙個小工具,網上搜尋了一下,很多這種的小工具但是並不適合我,自己動手豐衣足食,接下來我們**一下這個小工具的實現。
二、小工具設計思路
需要兩個資料庫進行比較,那麼我們需要兩個不同的資料庫甚至連線兩個不同的資料庫伺服器,針對不同的資料庫伺服器中的兩個資料庫進行表結構比對(大家可以考慮儲存過程,函式等的比對,比對過程都不會難),想到這些我們就可以開始著手開始設計程式了,設計介面如下圖所示:
三、程式設計
獲取表結構的sql語法:
use dbname--換成你自己的資料庫名稱
select distinct 表名 = object_name(c.object_id),
表描述 = (select top 1 a.[value] from sys.extended_properties a left join sysobjects b on a.major_id=b.id where b.name=object_name(c.object_id) and a.minor_id=0 ),
欄位名 = c.name, 字段描述 = ex.value, 字段型別 = t.name, 字段長度 = c.max_length, 位數 = c.precision, 小數字 = c.scale
from sys.columns c left outer join sys.extended_properties ex
on ex.major_id = c.object_id and ex.minor_id = c.column_id and ex.name = 'ms_description'
left outer join systypes t on c.system_type_id = t.xtype where
objectproperty(c.object_id, 'ismsshipped') = 0 and
t.name != 'sysname'
編寫乙個方法放入上述sql 返回乙個datatable。
獲取資料庫中表的建立語法:
use dbname--此處替換為你自己的資料庫名稱
set arithabort on
set concat_null_yields_null on
set quoted_identifier on
set ansi_nulls on
set ansi_padding on
set ansi_warnings on
set numeric_roundabort off
declare @crlf char(2)
set @crlf=char(13)+char(10)
這個sql語法是網上某位大神的,我收藏了很久了都忘記在**了,這裡不能提供出處,望見諒。
在此處也一樣的編寫乙個方法來執行上述sql 返回乙個datatable
做好上述準備以後我們就可以來實現 表結構比對方法了,此時我們需要考慮一下幾點:
1.目標資料庫中無**資料庫中表的情況下,獲取建立表語法
2.目標資料庫中存在**資料庫中表的情況下,進行表字段比較
3.綜合第2點,目標資料表中無**資料表中的字段,則在目標資料表中新增**表的字段
滿足上述這些要求我們就可以設計出乙個比對方法了。接下來提供資料庫表字段的新增sql語法和字段描述的sql語法如下:
--新增資料庫欄位的語法
這兩個語法我直接放**上來了,我用的foreach迴圈。
這個工具可以從
此處安裝使用,使用過程中有什麼問題可以回帖提出,最好的是自己手動編寫乙個滿足自己需求的。
資料庫比對
如何快速進行兩個資料庫結構的比對,以下三步可以輕鬆完成 一 建立資料庫連線 create public database link dl system connect tosystem identified by oracle using description address list addre...
Oracle資料庫比對
plsql developer tools選單下有compare user objects和compare table data功能。tools compare user objects 該功能用於比較不同使用者所擁有的物件 包括table sequence function procedure v...
Oracle資料庫比對
plsql developer tools選單下有compare user objects和compare table data功能。tools compare user objects 該功能用於比較不同使用者所擁有的物件 包括table sequence function procedure v...