2009-04-28 27 views
10

Visual Studio 2008を使用してSQL Server Compact Editionデータベース(* .sdf)を設計しています。新しい列を追加するテーブルのスキーマを変更する必要がありました。SQL Server Compact Editionのテーブルスキーマで列の順序を変更する方法はありますか。

私はに、新しい列を「移動」して、フィールドリストの下の位置から別の位置に移動します。 Visual Studioデザイナーでこれを行うにはどうすればいいですか?

EDIT:純粋な技術的観点からは、列の順序は関係ありません。私はアプリケーションのプロトタイプを作成しているので、スキーマを数回変更する必要があります。たとえば、主キーを変更する必要がある場合は、最後に最も重要な列を持つ「醜い」となります。コードを見ている他の開発者は混乱するだろうと私は思う。それは美学の問題です。

答えて

5

デザイナーで移動することはできません。新しい列を作成し、古い列を削除し、スクリプトを生成し、古い表の一時表に挿入するスクリプトを編集して、古い列の値(選択内)を新しい列に移動する必要があります。

+0

ありがとうございました。 VSでテーブルをスクリプト化するにはどうすればよいですか?私はそのオプションを見つけませんでした。 – splattne

+0

私はSQL Server Management Studioを使用していますので、少し違います(VSはありません)。 「テーブルデザイナー」ツールバーが表示され、ディスケットのスクロールのようなアイコンをクリックし、表示されたウィンドウからテキストをコピー/貼り付けします。操作をキャンセルして、変更が実行されないようにしてください。 –

+0

私は盲目でなければなりません。私はツールバーを見つけることができません。 SQL Server Compactデータベースを使用していますか? – splattne

2

私はPaxに同意します。特定の理由により、クエリの特定の順序でフィールドを返す必要がある場合は、必要な場所にフィールドを配置するクエリを変更します。

どんな理由であれ、あなたはそのフィールドを移動するために、すべてのコストでを必要とする、場合、あなたはFIELD3のTestTableと呼ばれる表の最初の列になり、次のようなスクリプト、でそれを行うことができます。

/* Original sample table with three fields */ 
CREATE TABLE [dbo].[TestTable](
    [FIELD1] [nchar](10) NULL, 
    [FIELD2] [nchar](10) NULL, 
    [FIELD3] [nchar](10) NULL 
) ON [PRIMARY] 

/* The following script will make FIELD3 the first column */ 
CREATE TABLE dbo.Tmp_TestTable 
    (
    FIELD3 nchar(10) NULL, 
    FIELD1 nchar(10) NULL, 
    FIELD2 nchar(10) NULL 
    ) ON [PRIMARY] 
GO 
IF EXISTS(SELECT * FROM dbo.TestTable) 
    EXEC('INSERT INTO dbo.Tmp_TestTable (FIELD3, FIELD1, FIELD2) 
     SELECT FIELD3, FIELD1, FIELD2 FROM dbo.TestTable WITH (HOLDLOCK TABLOCKX)') 
GO 

DROP TABLE dbo.TestTable 
GO 

EXECUTE sp_rename N'dbo.Tmp_TestTable', N'TestTable', 'OBJECT' 
GO 

しかし、あなたの問題はおそらく、リストラテーブルを必要としない別のアプローチで解決できると主張しています。

+1

それは私の肛門保持力です。 ;-)私は最終的に最も重要な列を持つテーブルを見ることができません... – splattne

+0

私の提案はいくつかの助けになることができますように願っています。:) – Diego

+1

インデックス、fk、チェック制約など、他のすべてのテーブル項目をコピーするようにしてください。 –

0

次の手順に従います。

  1. すべての外部キーと元のテーブルの主キーを削除し、あなたが
  2. ドロップをしたいために、元のテーブルを作成するCTASを使用して
  3. 元のテーブルの名前を変更します古いテーブル。
  4. 元のテーブルにすべての制約を適用します。
関連する問題