2009-07-27 10 views
1

Cela peut-il être fait en vrac aussi? Alors que toutes les colonnes de la table peuvent être configurées pour désactiver le drapeau 'NOT NULL'?Est-il possible de modifier ALTER une colonne pour désactiver 'NOT NULL'?

+0

pour une base de données MSSQL juste pour clarifier;) – Stephen

+0

Quelle version de SQL Server? Fera une différence dans le script idéal pour passer par tous ... – AakashM

+0

Je suis préoccupé par la raison pour laquelle quelqu'un voudrait le faire en masse. Je ne considérerais jamais un changement de cette ampleur sans examiner l'impact sur chaque partie de mon système, vous pouvez casser beaucoup de choses quand soudainement vous permettez des nullités là où elles n'étaient pas avant. Et il y a généralement une raison pour laquelle le champ n'autorise pas les valeurs nulles. – HLGEM

Répondre

3

Vous devez pouvoir utiliser une instruction ALTER TABLE xxx ALTER COLUMN pour redéfinir la colonne.


Si cela est une chose une fois que vous devez exécuter, vous pouvez utiliser une astuce en écrivant une requête qui interroge les noms de colonnes pour la table du système/table dba et génère vos déclarations alter. Vous copiez les résultats de la requête (vos 15 ou plusieurs instructions alter) dans votre script et exécutez-le. Je n'ai pas beaucoup d'expérience MSSQL, ni un environnement à tester en ce moment, mais quelque chose le long des lignes de:

SELECT 
    'ALTER TABLE ' + table_name + ' ALTER COLUMN ' + column_name + ' ' + data_type 
FROM INFORMATION_SCHEMA.Columns 
WHERE TABLE_NAME = 'xxx' 

où vous aurez besoin de manipuler la partie data_type pour ajouter/supprimer le texte de contrainte NULL

+0

Cool, est-il possible de faire cela en boucle pour parcourir chaque colonne de la table? Si oui, alors pouvez-vous expliquer/montrer le code? – Stephen

+0

La requête ci-dessus va afficher plusieurs scripts ALTER TABLE, un pour chaque colonne.Exécuter chacun, l'un après l'autre, va modifier toutes les colonnes –

0

Oui, vous pouvez le faire. Lire des livres en ligne. Non, cela ne peut pas être fait en bloc, mais vous pouvez exécuter plusieurs instructions dans une seule requête.

+0

Le problème est que la table a tellement de colonnes que cela prendrait pour toujours :( – Stephen

+0

Eh bien, si la table a tellement de colonnes que vous ne pouvez pas le faire manuellement, alors vous devriez * vraiment * repenser votre table desing :-(. Vous pouvez écrire l'instruction ALTER, soit en T-SQL (devrait être possible), soit écrire un script qui génère les instructions ALTER – sleske

0

Obtenez une liste des colonnes et un modèle qui a le code SQL requis et utilisez un outil pour créer les instructions pour vous. Je l'ai déjà fait dans Excel, mais vous pouvez écrire un vrai programme en utilisant la langue de votre choix.

1

Pour le faire en vrac, une fois ...

Utilisez concepteur SSMS pour générer un script. Cela va reconstruire votre table (créer une table temporaire, copier des données, supprimer l'ancienne table, renommer la table temporaire).

Sinon, il est un à la fois en utilisant ALTER TABLE ...

0

Lorsque le nombre de tables est assez bas pour que je utilise SSMSE (SQL Server Management Studio Express), en entrant en mode de conception sur chaque table et vérification Autoriser Nulls dans les colonnes obligatoires.

Pour un plus grand nombre de tables, essayez la réponse fournie par ChrisCM.

Questions connexes