web-dev-qa-db-ja.com

SQLServerは列のデフォルト値を追加します

MS SQL Serverを使用しています。 「アクション」テーブルに「action_type」列があり、「to do」のデフォルト値を設定したい。 MS SQL Studioの私のDDLエラー!私は自分が間違っていることを解決しようとする多くの記事を読みましたが、何も機能していないようです。 DDLは次のとおりで、テーブルCREATEは機能し、ALTERは失敗します。

CREATE TABLE "action"
( "action" INT IDENTITY(1,1)
, "name" VARCHAR(250) NOT NULL
, "owner" VARCHAR(50)
, "action_type" VARCHAR(50) NOT NULL
, "due_date" DATETIME
, "done_date" DATETIME
, "successful" BIT NOT NULL
, "job" INT
, "contract" INT
, "person" INT
, "description" VARCHAR(MAX)
, "deliverable" VARCHAR(MAX)
, "outcome" VARCHAR(MAX)
, "source" VARCHAR(50)
, "notes" VARCHAR(MAX)
);
ALTER TABLE "action"
ADD CONSTRAINT "df_action_0" DEFAULT "To Do" FOR "action_type";

ALTERステートメントはエラーを返します

メッセージ128、レベル15、状態1、行4このコンテキストでは「To Do」という名前は許可されていません。有効な式は、定数、定数式、および(一部のコンテキストでは)変数です。列名は許可されていません。

「やること」を「やること」、「やる​​こと」、「やる​​こと」などに置き換えてみたさまざまな記事に基づいて、何も機能しません。

3
Mark Kortink

それはあなたの引用です。それらを削除し、リテラルを単一引用符を使用するように変更すると、問題ありません。 SQL Server DEFAULTは SET QUOTED_IDENTIFIER ON であり、このリテラルでは単一引用符で区切る必要があります。したがって、この部分を変更するだけで十分です。

[〜#〜] demo [〜#〜]

ALTER TABLE "action"
ADD CONSTRAINT "df_action_0" DEFAULT 'To Do' FOR "action_type";

ただし、この方法で使用されていない二重引用符がより一般的に表示され、代わりにDDLは次のように記述されます。

CREATE TABLE action
( action INT IDENTITY(1,1)
, name VARCHAR(250) NOT NULL
, owner VARCHAR(50)
, action_type VARCHAR(50) NOT NULL 
, due_date DATETIME
, done_date DATETIME
, successful BIT NOT NULL
, job INT
, contract INT
, person INT
, description VARCHAR(MAX)
, deliverable VARCHAR(MAX)
, outcome VARCHAR(MAX)
, source VARCHAR(50)
, notes VARCHAR(MAX)
);

ALTER TABLE action
ADD CONSTRAINT df_action_0 DEFAULT 'To Do' FOR action_type;
11
scsimon