4

Visual Studio 2010の新しいデータベースプロジェクト機能をテストしていて、テーブルの列の名前を変更したいと思います。createスクリプトで名前を変更し、データベースに対してデプロイしました。生成されたスクリプトは、列を削除し、正しい名前の新しい列を追加しましたが、すべてのデータが失われました。

列データを削除しない設定はありますか?

この問題に対する「DataDude」ソリューションを探しています。(ある場合)

PRINT N'Altering [dbo].[Users]...';

GO
ALTER TABLE [dbo].[Users] DROP COLUMN [TestX];

GO
ALTER TABLE [dbo].[Users]
    ADD [Testn] NVARCHAR (50) NULL;

GO

ありがとう、キース

4

3 に答える 3

7

[表示]->[データベーススキーマビュー]をクリックして、スキーマビューを使用します

テーブルとその列を展開します。

列を右クリックし、[リファクタリング]->[名前の変更...]をクリックします。

[変更のプレビュー]チェックボックスをオンにして、[新しい名前]フィールドの名前を変更します。

列名だけでなく、その列を参照している可能性のあるストアドプロシージャも変更されることに注意してください。

データベースプロジェクト内に、名前の変更を示すリファクタログファイルが作成されます。

新しいスキーマが既存のデータベースに対してデプロイされると、DataDudeはリファクタリングファイルとdbo._Refactorlogテーブルを調べて、データベースに対して処理する必要のあるリファクタリングを決定しているように見えます。

このプロシージャを使用して生成されたコードは、ストアドプロシージャでも参照されている列名を変更することです。

EXECUTE sp_rename @objname = N'[dbo].[Users].[TestF]', @newname = N'TestG', @objtype = N'COLUMN';

GO
PRINT N'Altering [dbo].[ListUsers]...';

GO
ALTER PROCEDURE [dbo].[ListUsers]

AS
    SELECT [ID], [FirstName], [LastName], [TestG]
    FROM Users
RETURN 0
GO

キース

于 2010-06-10T19:27:24.070 に答える
1

テーブルが小さい場合は、正しい列を使用して新しいテーブルを作成し、古いテーブルから新しいテーブルに挿入して、列を変更することができます。

テーブルが大きく、テーブル全体をコピーするための時間、RAM、または労力のいずれかを支払う余裕がない場合は、次のことが でき alter table add new_column ます 。 update table set new_column=old_columnalter table drop column old_column

もちろん、構文は単純化されています。

于 2010-06-10T17:37:01.460 に答える
1

Visual Studioデータベースプロジェクトがスキーマの変更を処理する方法は、この種の混乱を招きます。列の名前を変更しただけなのか(データを保持する必要があるのか​​)、列を削除して別の列を追加したのかをVSが判断するのは非常に困難です。私の会社は、これらの同じ問題をすべて抱えているデータベーススキーマソース管理製品にかなり長い間取り組んできました。

結局、スキーマの変更を処理する最良の方法は、 K。Scott Allen(Jeff Atwoodが参照)によって提案された方法であると私は信じるようになりました。この一連の記事は、より優れたデータベースバージョン管理ソリューションに向けた道筋を示すはずです。

于 2010-06-10T17:44:44.437 に答える