12

バージョンを SQL Server 2005 データベースに配置し、これらに .NET アプリケーションからアクセスできるようにする必要があります。私が考えていたのは、「バージョン」という名前のデータベースで拡張プロパティを使用することであり、もちろん値はデータベースのバージョンになります。次に、SQL を使用してこれを取得します。私の質問は、これは良い計画のように聞こえますか、それとも SQL Server データベースにバージョンを追加するためのより良い方法はありますか?

メタデータを保持するためにテーブルを使用できないと仮定しましょう。

4

5 に答える 5

12

私はこれをします:

スキーマ テーブルを作成します。

CREATE TABLE [dbo].[SchemaVersion](
    [Major] [int] NOT NULL,
    [Minor] [int] NOT NULL,
    [Build] [int] NOT NULL,
    [Revision] [int] NOT NULL,
    [Applied] [datetime] NOT NULL,
    [Comment] [text] NULL)

スキーマの更新:

INSERT INTO SchemaVersion(Major, Minor, Build, Revision, Applied, Comment)
VALUES (1, 9, 1, 0, getdate(), 'Add Table to track pay status')

データベース スキーマ バージョンを取得します。

SELECT TOP 1 Major, Minor, Build from SchemaVersion
ORDER BY Major DESC, Minor DESC, Build DESC, Revision DESC

Coding Horrorで読んだものから改作

于 2009-01-16T20:35:54.187 に答える
6

あなたが説明したように、拡張プロパティを使用していますが、非常にうまく機能します。

テーブルを持つことはやり過ぎだと思います。データベースの違いを追跡したい場合は、ソース管理を使用し、すべてのデータベース生成スクリプトをそこに保持します。

また、DB バージョンの変更を追跡するために、いくつかの ER 図ツールを使用しました。これは実際のアプリケーションの範囲外でしたが、何が変わったのかをすぐに確認できました。

CASEStudioとかだったと思います。

于 2009-01-16T20:48:46.237 に答える
2

私があなたの質問を正しく理解していれば (アプリケーションのビルド番号など、内部データベースのバージョンを区別する)、この情報を含む単一行のデータを保持するある種の SYSVERSION テーブルを持つことができます。

より簡単にクエリできます。

また、有用な情報の複数の列、またはデータベースのコピーがアップグレードされたさまざまな時間を表す複数の行を含めることもできます。

更新:テーブルを使用してメタデータを保持できない場合は、何らかの外部情報 (ハード ドライブ上の INFO ファイル?) または拡張プロパティのいずれかを使用することをお勧めします。

ただし、私はまだテーブルのアイデアが好きです:)いつでもセキュリティを使用して、カスタムストアドプロシージャget_db_versionなどを介してのみアクセスできるようにすることができます。

于 2009-01-16T20:29:39.690 に答える
0

最良の方法は、2 つの手順を用意することです。挿入される内容を制御するヘッダーと、リリースが良好かどうかを判断するデータを挿入するフッターの検証です。本文にはスクリプトが含まれます。

スクリプトをカプセル化し、すべての情報を記録するラッパーが必要です: これまでのリリース、適用されたスクリプト番号、applyby、適用日、リリース結果「失敗または成功」。

于 2011-11-29T22:28:17.130 に答える