Comment ne pas stocker une valeur dans une colonne?

J'ai moi cette belle table.

create table Records ( Id uniqueidentifier primary key, Occasion datetime not null, Information varchar(999) default ' ' ) 

Quand j'exécute la première ligne ci-dessous, j'obtiens une erreur. Quand j'exécute la seconde, je vois NULL dans la cellule. Comment dois-je insert des choses dans la table afin que l'espace blanc par défaut entre en action?

 insert into Records values (newid(), convert(varchar(21), getdate(), 121)) insert into Records values (newid(), convert(varchar(21), getdate(), 121), null) 

Le message d'erreur est celui par défaut mais je le mettrai ici de toute façon, au cas où quelqu'un le requestrait.

Le nom de la colonne ou le nombre de valeurs fournies ne correspond pas à la définition de la table.

En utilisant le mot-key DEFAULT :

 INSERT INTO Records VALUES (newid(), CONVERT(varchar(21), getdate(), 121), DEFAULT) 

Ou, mieux, en spécifiant les colonnes exactes avec l'instruction INSERT

 INSERT INTO Records (Id, Occasion) VALUES (newid(), CONVERT(varchar(21), getdate(), 121)) 

Ou:

 INSERT INTO Records (Id, Occasion, Information) VALUES (newid(), CONVERT(varchar(21), getdate(), 121), DEFAULT) 

Pourquoi est-ce mieux?

  1. Parce que vous ne devriez pas countr sur l'ordre des colonnes dans votre tableau.
  2. Parce que vous ne devriez pas countr sur le fait que la table n'aura jamais de colonnes nouvelles ou supprimées (ce qui est quand votre requête se cassera à nouveau).

Egalement intéressant: SQL Column definition: valeur par défaut et non null redondant?

 insert into Records ( Id Occasion ) values (newid(), convert(varchar(21), getdate()), 121)) 

Essaye ça.

Lorsque vous n'indiquez pas de noms de colonnes dans la requête d'insertion, sql-server attend des valeurs pour toutes les colonnes. c'est pourquoi votre première requête génère une erreur car vous avez fourni une valeur pour deux colonnes seulement, alors que votre deuxième requête fonctionne correctement

Essaye ça:

 insert into Records values (newid(), convert(varchar(21), getdate()), 121) 

Vous devez fermer le ( de convertir.