データベースのアップグレードプログラム
まず、問題が直面しています
頻繁に遭遇する問題であり、この作業はより複雑であるプロジェクトでのデータベースのアップグレード、特にオンラインデータベースのアップグレードは、我々が最初に通常直面する問題を見て、非常に注意する必要があります。
図1は、フィールドの追加、フィールドのタイプまたは長修飾を含むテーブルの変更は、主キーなどを置き換えます。アップグレードのテーブルのために再構成を削除することはできません、あなたは個別に変更する必要がある、またはアップグレードするためのスクリプトを作成します。
2.変更は、基礎となるデータには影響しません、フィールドの増加以外の何物でも、フィールドがキャンセルされていない、ビューのビューが比較的簡単で、変更します。アップグレードビューは再構築を削除することができます。
3、同じ修正、変更およびストアドプロシージャを表示するストアドプロシージャは、スクリプトによって行うことができますどちらも、復興を削除することができます。
4、機能を変更し、関数やストアドプロシージャ、関数、などをアップグレードするためのプロジェクトで使用される場合には、それらを繰り返しません。
図5は、上記は基本的にデータベースのほとんどがアップグレードシナリオをカバーし、このような作業は、データベース管理ツールで行うことができ、あなたも完了するために、スクリプトを書くことができます。あなたは、レコードごとに変更を行うための場所を持っていない限り、フィールドは、変更された私は、これは問題ではありませんと言いたいが、時には我々は、そのテーブルを知らない、しかし、アップグレードが必然的に落ちるとき。
当社は、プラットフォームの請求書を開発した開発プラットフォーム、設定OAシステム、請求書発行を有し、2つの業界請求書発行版拡張:靴や薬が通過、上記の製品に興味を持っていますネットワークQuguanできるwww.hfbpm.comを下記のように裁判、製品ラインを:
データベースと基本的な機能は、一般的な在庫テーブル、テーブル内のOA用途開発プラットフォームを使用して、医療上のテーブルや靴で、すなわち請求書の使用開発プラットフォームを継承している、データベースは、それらの間のアップグレード非常に多くの場合、ちょうど地元の手動の調整により取得し、アップグレードを対象とし、後、私たちは、作業負荷が非常に大きく、多くの場合、間違っていました。
、データベース間の差は、アップグレードきっぱりとする方法はありますか?限りイデオロギーが問題よりも地すべりソリューションではありませんよう!
アプローチはイエス間違いです。
第二に、ソリューション
、あなたが再構成を削除することができ、主に、比較的簡単な3続いテーブル、ビュー、ストアドプロシージャ、関数のアップグレードを、解決するために、データベースのアップグレードを解決するには、難易度は、スクリプトが3を作成する方法を取得するのですか?あなたは、文が実行され、MSSQLSERVERも指定されたメソッドを(以下、特定紹介します)SQLできるようだけで、完全なスクリプトを取得します。表が再構成を削除することができないため、比較的トラブルのようにテーブルをアップグレードし、列、主キー、制約およびその他の項目別には、新しいテーブルにアップグレード比較しなければならないテーブルを作成するスクリプトを取得するための方法を提供していない、処理しなければなりません。
以下は、アップグレードプロセスを詳しく説明します。
1、テーブルの作成
MSSQLSERVERは、あなたが列はそのため私たちはSys_TableScript_MSSQLはそれを行うには、ストアドプロシージャ、次の図のストアドプロシージャのコードを書くの属性に基づいてスクリプトを作成するための独自のを生成する必要がテーブルを作成するためのスクリプトを取得する方法を提供していません。
次のようにスペースの制約、詳細なコードが掲載されていない、この方法はまた、ブログの庭から受信され、出力の実装後の結果についてはほとんど変更は次のとおりです。
買収は、通常のSQL文としてスクリプトを実行することができ、テーブルを作成するための完全なスクリプトです。
2、表のアップグレード
テーブルが既に列が直接を作成しない場合は、列が存在する場合、列の長さは、タイプで判断アップグレードするかどうか、、、アップグレードするために存在している場合は、NULLが許さ小数点以下の桁の数は、デフォルト値の変更があれば上に存在しているとして、発生しました変更は、アップグレードを発生します。
次のように、列を作成するためのSQLスクリプト:
ALTERの TABLEのテーブル名はADD列名型 ではない nullの デフォルト 「デフォルトを」
例えば
ALTER TABLE dx_ZhiBan ADD leaderName varchar(50) not null default '未填'
如果列已经存在需要使用修改列的sql脚本,如下:
ALTER TABLE 表名 alter column 列名 类型 not null
例如
alter table dx_ZhiBan alter column Leader nvarchar(50) not null
修改列时如果修改默认值,修改列的脚本不支持直接修改默认值,因为列一旦创建了默认值,那么就创建了一个约束,需要先删除这个约束,再重新创建默认值。删除默认值约束需要先找到默认值约束的名字,再执行删除约束脚本。查找默认值约束的sql脚本如下:
select c.name from sysconstraints a inner join syscolumns b on a.colid=b.colid inner join sysobjects c on a.constid=c.id where a.id=object_id('表名') and b.name='列名'
找到约束的名字如下图:
删除默认值约束的sql脚本如下图:
alter table 表名 drop constraint 默认值约束名
例如:
alter table dx_ZhiBan drop constraint DF__dx_ZhiBan__Leade__3FE65219
删除默认值后,再执行创建默认值的sql脚本,如下:
alter table 表名 add default '默认值' for 列名 with values
例如:
alter table dx_ZhiBan add default '未填' for Leader with values
表的升级除了列还包括主键,主键的升级和默认值类似(因为他们都属于约束),需要先删除原来,再创建新的。查找主键约束的sql脚本如下:
Select name from sysobjects where Parent_Obj=OBJECT_ID('表名') and xtype='PK'
例如:
Select name from sysobjects where Parent_Obj=OBJECT_ID('dx_ZhiBan') and xtype='PK'
查找结果如下:
删除主键约束的sql脚本如下:
Alter table dx_ZhiBan Drop PK_dx_ZhiBan
创建主键的sql脚本如下:
ALTER TABLE dx_ZhiBan ADD PRIMARY KEY (ID, leader )
注意,联合主键用逗号分隔,另外,需要说明的是在升级之前要判断主键是否需要升级,如果主键没有变化就不需要升级。
3、视图升级
视图升级过程较简单,删除掉重新创建即可。删除视图的sql脚本如下:
drop view 视图名
获取视图创建脚本的sql脚本,如下:
EXEC sp_helptext @objname='视图名称'
执行后结果如下图:
获取到该脚本后,当做普通的sql语句执行即可。
4、存储过程、函数升级
二者的升级和视图类似,不再赘述,不同的是删除存储过程的sql脚本是:
drop procedure 存储过程名
删除函数的sql脚本是:
drop function 函数名
5、数据库升级工具
数据库的升级是都能通过sql脚本来完成的,把这些脚本管理起来需要借助程序来完成,我们使用net的WinForm来编写程序。如下图:
使用这个工具可以选择那些对象需要升级(没有勾选的不升级),升级的时候能看到进度和升级结果。
本方案并不是十全十美的,有些问题还没解决,例如列名称修改、如何删除多余的列等。其他不当之处欢迎大家留言指正。