Suppression rapide et recréation de plusieurs index, vues et statistics lors de la modification d'une colonne

J'ai une colonne "StoreNumber" dans ma table "Project" que je veux changer pour être "NOT NULL". J'ai récemment assaini toutes les anciennes données afin qu'il n'y ait pas d'inputs nulles. Toutefois, lorsque j'exécute l'instruction suivante, il échoue en raison de plusieurs dependencies à divers affichages, index et statistics

ALTER TABLE [Project] ALTER COLUMN StoreNumber VARCHAR(9) NOT NULL GO 

Quel est le moyen le plus rapide de supprimer toutes ces vues / index / statistics, puis d'exécuter l'instruction alter, puis de recréer toutes les vues / index / statistics? Je sais que je pourrais copyr toutes les instructions drop et create une par une, mais je préférerais générer le script en une seule requête.

D'un autre côté, pourquoi SQL Server se soucie-t-il si je rends la colonne plus ressortingctive? Les données ne contiennent pas de valeurs NULL et je ne modifie pas le type de données ou la taille des colonnes. Comment ce type de changement briserait-il une vue, un index ou des statistics dépendant? Je suis sûr qu'il y a un bon raisonnement que je ne vois pas mais j'aimerais un exemple.

Juste à y penser; cela fonctionnera-t-il si vous définissez une valeur par défaut en premier? (ne pas vérifier le sintax moi-même)

 ALTER TABLE Project ADD CONSTRAINT col_sn_def DEFAULT '' FOR StoreNumber; GO 

Ce qui suit va supprimer plusieurs index. Notez que la déclaration finale n'inclut pas la virgule.

 DROP INDEX [index1_1] ON [schema].[table1], [index1_2] ON [schema].[table1], [index2_1] ON [schema].[table2], [index3_1] ON [schema].[table3], ...n, [lastIndexToDrop] ON [schema].[tableName] 

Drop View ressemble à ceci. Notez le point-virgule pour terminer l'instruction.

 DROP VIEW [schema].[view1], [schema].[view2]; 

Je ne suis concerné par Indexes dans ma request en ce moment. Pour recréer rapidement les index, je lis un file .sql en code et l'exécute dans un appel ExecuteNonQuery. Si j'avais des vues à considérer, je suivrais la même méthode de lecture d'un file dans une command à exécuter avec ExecuteNonQuery.

https://msdn.microsoft.com/en-us/library/ms173492.aspx

https://msdn.microsoft.com/en-us/library/ms176118.aspx