web-dev-qa-db-fra.com

Modification de la taille d'une colonne référencée par une vue liée au schéma dans SQL Server

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?

124
Staelen

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é.

57
Remus Rusanu
ALTER TABLE [table_name] ALTER COLUMN [column_name] varchar(150)
256
Syed Baqar Hassan

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 -

  1. SSMS ouvert
  2. Connect to Publisher database
  3. commande d'exécution - ALTER TABLE [Table_Name] ALTER COLUMN [Column_Name] varchar(22)
  4. Cela augmentera la largeur de la colonne de 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éplication

J'espère que cela aidera tous ceux qui le cherchent.

6
Devshish

Voir ce lien

Redimensionner ou modifier une colonne de table MS SQL Server avec une contrainte par défaut à l'aide de commandes T-SQL

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

5
RRUZ

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 :)

2
Passingn Searcher

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.

0
user3103989