Comment faire pour modifier la valeur par défaut d'une colonne dans SQL Server
Soi-disant j'ai une table nom de la Personne définie comme ceci:
CREATE TABLE Persons
(
P_Id uniqueidentifier Default newsequentialid() NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)
Comment puis-je supprimer la valeur par défaut pour la colonne à l'aide d'une requête sql? En outre, comment puis-je l'ajouter si elle n'est pas présente pour commencer.
Je sais que c'est possible de l'ajouter via modifiant la table et l'ajout d'une contrainte sur la P_Id colonne, mais je ne suis pas sûr si c'est la seule façon. Je suis venu à travers cet article cependant, ce qui est suggéré il ne semble pas vraiment travailler.
Des idées?
- Vous allez certainement
ALTER
votre table, car c'est la seule façon de modifier sa structure. - Pour ce qui de la colonne? Vous avez deux colonnes avec des valeurs par défaut. L'approche sera la même, veulent juste s'assurer des exemples explicites sont le traitement de la colonne que vous êtes en train de parler.
Vous devez vous connecter pour publier un commentaire.
Dans SQL Server, les paramètres par défaut sont définies comme des contraintes particulières associées à une colonne dans une table. Toutes les contraintes sont attribué un nom; c'est important, parce qu'une fois que la contrainte est créé, si vous souhaitez le modifier, vous devez le référencer par ce nom. (Et je vais regarder cette question, pour voir si je me trompe.)
Basé sur cet exemple de table:
Étape 1: Déterminer si une contrainte n'existe que sur une colonne. Plusieurs façons de le faire, tout en impliquant les vues du système et/ou de fonctions de métadonnées. Voici un rapide, où ‘MyTable’ et ‘SomeData " pourrait être défini comme paramètres:
Essayez, et vous verrez que le nom généré est essentiellement aléatoire bêtises. Pour déterminer si un défaut existe sur une colonne, vous pouvez faire:
Pour supprimer un défaut existant où vous ne connaissez pas le nom, vous aurez à construire SQL dynamique. (ce code dans l'article référencé est mal, et n'a donc jamais testé.) @Călin t-il un peu différemment que je le ferais, mais l'idée est la même:
(Avec contrôle d'erreur, les paramètres de la table et de colonne et en cours de vérification, et ainsi de suite.)
Enfin, vous pouvez éviter la plupart de ce en nommant les valeurs par défaut lorsque vous créez la contrainte, comme suit:
Ou comme:
La façon la plus simple de comprendre la syntaxe pour une table qui existe déjà est de cliquer droit sur la table dans l'Explorateur d'Objets et de choisir
Script As > Create To > New Window
. Cela vous aidera à générer le script d'une table similaire si vous avez besoin d'en créer un.Je ne connais pas de moyen facile de le faire pour
ALTER
, cependant. Dans votre cas, que la contrainte par défaut n'étaient pas sur cette colonne, je dirais:Et c'est juste parce que je sais déjà la syntaxe pour ajouter des contraintes à une table, puisque j'ai dû le faire un peu. Cet article date un peu, mais il pourrait être utile puisque la plupart des il est toujours pertinent et il ne manque pas beaucoup en termes de nouvelles fonctionnalités:
Travailler avec des Contraintes par Défaut
Et bien sûr le
ALTER TABLE
sujet dans la documentation en Ligne:http://msdn.microsoft.com/en-us/library/ms190273.aspx
Si vous souhaitez supprimer la contrainte, vous devez d'abord trouver le nom et alors vous pouvez dire:
@Calin posté une requête qui vous permettra d'obtenir le nom de la contrainte, mais je ne pense pas que vous pouvez passer
@constraintname
à laALTER TABLE
déclaration de cette façon.Vous pouvez obtenir le nom de la contrainte par défaut à l'aide d'une requête sur
sys.default_constraints
, puis déposez par une modification de votre table:sp_executesql
, vous avez besoin pour construire la première commande. Avez-vous l'essayer? Aussi,varchar(max)
, vraiment?sp_executesql
implique unnvarchar
de commande.