Mise à jour de tous les composants de SQL NULL valeurs de plusieurs colonnes à l'aide de la Colonne au niveau de la clause where?
Nous avons une base de données avec un tas de tables large (de 40 à 80 colonnes) et je viens de trouver un bug qui introduit des valeurs NULL dans environ 500 enregistrements. Les valeurs NULLES peuvent apparaître dans l'une des colonnes (elles sont toutes les colonnes de type entier, voir image ci-dessous), mais ces valeurs NULL sont à l'origine de problèmes avec l'un de nos systèmes de déclaration qui ne peut être changé facilement. Nous avons besoin de remplacer les valeurs NULL avec une valeur statique (dans ce cas-99), mais depuis ce changement doit être faite sur l', colonne par colonne, pour plus de 250 différentes colonnes, je préfère ne pas écrire des scripts TSQL mise à jour de chaque colonne, un par un.
Mon cerveau est trop frit droit maintenant à trouver une solution intelligente, donc ma question est comment puis-je effectuer cette tâche sur toutes les colonnes dans une table (ou mieux encore plusieurs tables) à l'aide d'un simple et lisible de la requête SQL. Je peux isoler les enregistrements assez facile à l'aide d'une chaîne de WHERE (Answer_1 IS NULL) OR (Answer_2 IS NULL) OR ...
ou même par AdministrationID numéros pour chaque table, mais cette astuce ne fonctionne pas quand la mise à jour de la clause where est par ligne et non par colonne. Des conseils?
Voici un exemple de requête montrant quelques-uns des enregistrements à partir de 4 tables différentes:
Je suppose que je voudrais ajouter une contrainte not null par défaut avec un 99 sur chaque et chaque colonne?
Je regarde cela et je me demande pourquoi les colonnes ne sont pas les éléments suivants: AdministrationID, InstrumentID, AnswerID, de la valeur. Heck, vous pouvez même ajouter un autre id, de sorte que vous pouvez fusionner toutes ces tables en 1...
OriginalL'auteur Greg Bray | 2010-10-15
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas toute convention à cet -- si vous voulez seulement de traiter les dossiers où les colonnes respectives sont NULS, vous devez utiliser:
Mais vous pouvez l'utiliser dans l'instruction de mise à JOUR:
La logique est que la valeur sera mise à jour à 99 seulement si la valeur de la colonne est NULL, car de la façon dont FUSIONNENT fonctionne--retour de la première valeur non NULLE (traitement de la liste de la gauche vers la droite).
CASE
déclaration... O_o+1 pour les Fusionner.
Et sur le côté positif, les colonnes sont toutes dans
Answer_
format, Greg doit être en mesure d'accomplir les scripts dans Excel assez rapide+1 bien sûr! FUSIONNER! Merci de me le rappeler...
OriginalL'auteur OMG Ponies
Depuis que vous avez à faire tout cela sur la place, j'ai écrit un peu de javascript pour vous aider à construire le sql. couper et coller dans votre barre d'adresse des navigateurs pour obtenir votre sql.
OriginalL'auteur jason saldo
Simplement interroger le sys.les colonnes de la table pour chaque table et de créer une certaine dynamique sql... C'est de la force brute, mais il vous évite d'avoir à écrire tout le code t-sql.
Par exemple:
OriginalL'auteur Hiawatha Tiller
Je n'aime pas l'idée de manipuler les données pour les fins de la déclaration. Si vous modifiez les valeurs NULL à 99, juste pour faire votre déclaration plus facile alors la je considère que les données sont corrompues. Que faire si il y a d'autres consommateurs en dehors de présentation de l'information qui ont besoin de véritables données?
Je préfère écrire un intelligent de requête pour le rapport. Par exemple, si vous utilisez la fonction ISNULL(columnname, 99), il serait de retour 99 chaque fois que la valeur de la colonne est NULL.
OriginalL'auteur Ashish Patel