2

現在、4 つの列を持つテーブルがあります。5 番目の列を追加したかったのですが、問題がありました。

SQL Server Studio Management 2008 でテーブルを開き、次のように列情報を追加しました。

CREATE TABLE [dbo].[Case]
(
    CaseId                  UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL,
    CaseNumber              NVARCHAR(50) NOT NULL,
    CourtId                 INT NOT NULL,
    DateOpened              DATETIME NOT NULL,
) 

私の追加:

CREATE TABLE [dbo].[Case]
(
    CaseId                  UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL,
    CaseNumber              NVARCHAR(50) NOT NULL,
    CaseName                NVARCHAR(50),
    CourtId                 INT NOT NULL,
    DateOpened              DATETIME NOT NULL,
)

CaseName 列を追加した後、Management Studio でテーブルを実行しようとしましたが、「データベースに 'Case' という名前のオブジェクトが既に存在します」というエラー メッセージが表示されました。列が追加されることを期待して、データベースを保存してから構築しようとしましたが、成功しませんでした。私は新しいクエリを試して、'Alter table "case" add CaseName nvarchar(50) を書いてみましたが、やはりうまくいきませんでした。ファイルを保存したため、新しい列でファイルが変更されたことが示されていますが、データベース全体を構築した後は変更が加えられていません。どんな役立つヒントも素晴らしいでしょう。

4

5 に答える 5

11

ALTER次のようにします。

ALTER TABLE [dbo].[Case] ADD CaseName NVARCHAR(50)

さらに良いことに、最初に列の存在を確認できます。

if not exists (SELECT 1 FROM sysobjects INNER JOIN syscolumns ON 
    sysobjects.id = syscolumns.id 
    WHERE sysobjects.name = N'Case' AND syscolumns.name = N'CaseName')
ALTER TABLE [dbo].[Case] ADD CaseName NVARCHAR(50)
于 2012-10-01T17:44:46.877 に答える
1

Alter tableの代わりにステートメントを使用します。Create

Alter何らかの理由でステートメントが機能しない場合はdrop、既存のテーブルとcreate新しいフィールドを持つ新しいテーブルを作成することもできますが、既存の行はすべて失われます。

SSMS を使用している場合は、列を追加するDesign代わりにテーブルEditを追加できます。

于 2012-10-01T17:42:03.550 に答える
1

あなたはこれを試してみるべきです

 ALTER TABLE [dbo].[Case]

    ADD CaseName NVARCHAR(50)

別のテーブルを作成しようとしていますが、テーブルCaseが既に存在するため、エラーが発生します。テーブルを編集したいときは、使用する必要がありますAlter table

于 2012-10-01T17:45:47.517 に答える
0

ALTERはあなたが調査する必要があるものです ( F1)

代替手段はです。
新しいテーブルを作成する

CREATE TABLE [dbo].[Case2]
(
    CaseId                  UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL,
    CaseNumber              NVARCHAR(50) NOT NULL,
    CourtId                 INT NOT NULL,
    DateOpened              DATETIME NOT NULL,
newcolumn               INT NULL    
) 

既存のテーブルから新しいテーブルにデータを移動する

INSERT INTO [dbo].[Case2]
SELECT * FROM [dbo].[Case]

それで

DROP TABLE [dbo].[Case]

次に、管理スタジオで「Case2」を右クリックし、名前を「Case」に変更します

于 2012-10-01T19:50:24.860 に答える
0

列を追加する前に列の存在を確認することをお勧めします。これは、移行スクリプトを使用する場合に特に重要です。

これが私が通常行う方法です:

IF NOT EXISTS(SELECT * FROM sys.columns  WHERE Name = N'ColumnName' AND Object_ID = Object_ID(N'TableName'))
BEGIN
    ALTER TABLE [dbo].TableName ADD ColumnName NVARCHAR(512) null
END
于 2016-01-13T12:01:16.833 に答える