SQLServer 2000の運転中のデータベース構造を調整する。


開発中のデータベース構造は、繰り返し修正することが避けられない。最も面倒なのは開発者のデータベース構造がすでに修正されたことに勝るものではないです。実際のアプリケーションではデータベースに大量のデータがありますが、どのようにデータベースの中のデータに影響しないで、データ構造を更新しますか?もちろん、私達は手動でデータベーステーブル構造を追加し、訂正し、削除したフィールドを一つ一つ調整できます。これは一つ二つのフィールドにとって、比較的簡単です。もし変更が大きい場合、このプロセスは非常に煩雑です。この文章はSQLServer 2000 T-SQL文を使ってデータベース構造の調整を行うもので、皆様に便利なものを提供したいと思います。以下は既存のデータベーステーブルHR_である。Userを例にとって、このような操作のやり方を説明します。
HR_User既存構造:

[UserId] [int] NOT NULL ,  Id,   
[UserName] [varchar] (50) NOT NULL ,     
一、データベースに新しいフィールドを追加します。
今は、HR_が必要です。Userにフィールドユーザーのニックネーム「NickName」「varrhar」(50)は空ではなく、生年月日「Birthday」「datetime」は空ではない。
この二つのフィールドを開発データベースに追加しました。クエリーアナライザまたは企業マネージャで新しいテーブルの構成文を作成します。

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[HR_User]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) 
drop table [dbo].[HR_User] 
GO 
CREATE TABLE [dbo].[HR_User] ( 
[UserId] [int] NOT NULL , 
[UserName] [varchar] (50) COLLATE Chinese_PRC_CS_AS NOT NULL , 
[NickName] [varchar] (50) COLLATE Chinese_PRC_CS_AS NOT NULL , 
[Birthday] [datetime] NOT NULL 
) ON [PRIMARY] 
GO 
ALTER TABLE [dbo].[HR_User] ADD 
CONSTRAINT [DF_HR_User_UserId] DEFAULT (0) FOR [UserId], 
CONSTRAINT [DF_HR_User_UserName] DEFAULT ('') FOR [UserName], 
CONSTRAINT [DF_HR_User_NickName] DEFAULT ('') FOR [NickName], 
CONSTRAINT [DF_HR_User_Birthday] DEFAULT (getdate()) FOR [Birthday], 
CONSTRAINT [PK_HR_User] PRIMARY KEY CLUSTERED 
( 
[UserId] 
) ON [PRIMARY] 
GO 
exec sp_addextendedproperty N'MS_Description', N'    ', N'user', N'dbo', N'table', N'HR_User', N'column', N'Birthday' 
GO 
exec sp_addextendedproperty N'MS_Description', N'    ', N'user', N'dbo', N'table', N'HR_User', N'column', N'NickName' 
GO 
exec sp_addextendedproperty N'MS_Description', N'  Id', N'user', N'dbo', N'table', N'HR_User', N'column', N'UserId' 
この時、私達は応用データベースの修正文を構築します。T-SQLはテーブル構造を修正して、新しいフィールド文法を追加します。Alter TABLE Table Table Addです。このように、二つのフィールドを追加したいです。このように書きます。

Alter TABLE [dbo].[HR_User] Add
 [NickName] [varchar] (50) COLLATE Chinese_PRC_CS_AS NOT NULL DEFAULT(''),
 [Birthday] [datetime] NOT NULL DEFAULT(getdate())
GO
 実は、中間の文は簡単なコピー作成文の中で、二つのフィールドの二つの文に対応しています。二つの文に説明の語句を加えて、完成させます。

exec sp_addextendedproperty N'MS_Description', N'    ', N'user', N'dbo', N'table', N'HR_User', N'column', N'Birthday'
GO
exec sp_addextendedproperty N'MS_Description', N'    ', N'user', N'dbo', N'table', N'HR_User', N'column', N'NickName'
GO
 二、データベース変更フィールド
 UserName、NickNameフィールドの長さが足りないことが分かりました。100に変更する必要があります。

Alter Table [HR_User] Alter
 Column [UserName] [varchar] (100) COLLATE Chinese_PRC_CS_AS NOT NULL
GO

Alter Table [HR_User] Alter
 Column [NickName] [varchar] (100) COLLATE Chinese_PRC_CS_AS NOT NULL
GO