J'utilise MS SQL Server. J'ai une table "action" avec une colonne "type_action" pour laquelle je souhaite définir une valeur par défaut "à faire". Mes erreurs DDL dans MS SQL Studio! J'ai lu beaucoup d'articles essayant de comprendre ce que je fais mal, mais rien ne semble fonctionner. Le DDL est le suivant, la table CREATE fonctionne et ALTER échoue.
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";
L'instruction ALTER renvoie une erreur
Msg 128, niveau 15, état 1, ligne 4 Le nom "To Do" n'est pas autorisé dans ce contexte. Les expressions valides sont des constantes, des expressions constantes et (dans certains contextes) des variables. Les noms de colonne ne sont pas autorisés.
Sur la base de divers articles, j'ai essayé de remplacer "To Do" par "To Do", N'To Do ", (" To Do ") et d'autres, rien ne fonctionne.
Ce sont vos citations. Si vous les supprimez et modifiez votre littéral pour utiliser des guillemets simples, tout devrait bien se passer. Les serveurs SQL par défaut sont SET QUOTED_IDENTIFIER ON et avec ces littéraux doivent être délimités par guillemets simples. Donc, vous n'avez vraiment besoin que de changer cette partie:
ALTER TABLE "action"
ADD CONSTRAINT "df_action_0" DEFAULT 'To Do' FOR "action_type";
Cependant, vous verrez généralement des guillemets doubles non utilisés de cette manière, et à la place, votre DDL sera écrit comme suit:
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;