J'essaie de changer la taille d'une colonne dans le serveur SQL en utilisant:
ALTER TABLE [dbo].[Address]
ALTER COLUMN [Addr1] [nvarchar](80) NULL
où la longueur de Addr1
était à l'origine 40
.
Cela a échoué, soulevant cette erreur:
The object 'Address_e' is dependent on column 'Addr1'.
ALTER TABLE ALTER COLUMN Addr1 failed because one or more objects access
this column.
J'ai essayé de lire à ce sujet et il semble que certaines vues référencent cette colonne et que SQL Server tente en réalité de supprimer la colonne qui a généré l'erreur.
Address_e
est une vue créée par l'administrateur de base de données précédent.
Existe-t-il un autre moyen de modifier la taille de la colonne?
Les vues sont probablement créées à l'aide de l'option WITH SCHEMABINDING, ce qui signifie qu'elles sont explicitement connectées pour empêcher de telles modifications. On dirait que le rapprochement a fonctionné et vous a empêché de casser ces vues, jour de chance, hein? Contactez votre administrateur de base de données et demandez-lui de faire le changement, une fois que cela aura confirmé l'impact sur la base de données.
De MSDN :
SCHEMABINDING
Lie la vue au schéma de la ou des tables sous-jacentes. Quand SCHEMABINDING est spécifié, la base table ou tables ne peuvent pas être modifiées dans une manière qui affecterait la vue définition. La définition de la vue elle-même doit d'abord être modifié ou abandonné à supprimer les dépendances sur la table qui doit être modifié.
ALTER TABLE [table_name] ALTER COLUMN [column_name] varchar(150)
Si quelqu'un souhaite "augmenter la largeur de colonne de la table répliquée" dans SQL Server 2008, il n'est pas nécessaire de modifier la propriété de "replicate_ddl=1
". Suivez simplement les étapes ci-dessous -
ALTER TABLE [Table_Name] ALTER COLUMN [Column_Name] varchar(22)
varchar(x)
à varchar(22)
et le même changement que vous pourrez voir sur l'abonné (la transaction a été répliquée). Donc, pas besoin de réinitialiser la réplicationJ'espère que cela aidera tous ceux qui le cherchent.
Voir ce lien
la solution à un tel problème SQL Server va être
Suppression ou désactivation de la contrainte DEFAULT sur la colonne de la table.
Modification du type de données de la colonne de la table et/ou de la taille des données.
Recréation ou activation de la contrainte par défaut sur la colonne de la table SQL.
Au revoir
voici ce qui fonctionne avec la version du programme que j’utilise: cela peut également fonctionner pour vous.
Je vais simplement placer l'instruction et la commande qui le fait. classe est le nom de la table. vous le changez lui-même dans la table avec cette méthode. pas seulement le retour sur le processus de recherche.
voir la classe de table
select * from class
changez la longueur des colonnes FacID (vu comme "faci") et le numéro de classe (vu comme "classnu") pour s’adapter aux étiquettes entières.
alter table class modify facid varchar (5);
alter table class modify classnumber varchar(11);
revoir le tableau pour voir la différence
select * from class;
(relancez la commande pour voir la différence)
Cela change le tableau pour de bon, mais pour le meilleur.
P.S. J'ai composé ces instructions comme une note pour les commandes. Ce n'est pas un test, mais peut aider sur un :)
Vérifiez le classement de la colonne. Ce script peut modifier le classement en fonction du tableau par défaut. Ajoutez le classement actuel au script.