Comment puis-je mettre à jour plusieurs colonnes avec un remplacement dans SQL server?
Comment puis-je mettre à jour les différentes colonnes et des lignes à travers une table? Je veux faire quelque chose de semblable à remplacer une chaîne de caractères dans SQL server
Je veux le faire, mais la valeur existe dans plusieurs colonnes du même type. Les valeurs sont des clés étrangères varchars à un employé de la table. Chaque colonne représente une tâche, de sorte que la même personne peut être attribué à plusieurs tâches dans un temps record et les tâches varient entre les enregistrements. Comment puis-je le faire efficacement? Fondamentalement, quelque chose de remplacer tous les travers des colonnes variables à travers une table.
Merci pour toute aide ou des conseils.
Cheers,
~ck à San Diego
Je suis de plus en c# d'un dev, donc je ne connais pas le fonctionnement interne de la base de données. Je suis curieux de tho comment vous allez représenter cette relation correctement? Si chaque enregistrement dans une table a représenté un projet, et chaque colonne représente une tâche, et un employé peut être affecté à une ou plusieurs tâches. Où est la duplication? Comment puis-je y remédier? Veuillez informer.
Je pense que vous devriez donner un exemple de ce que vous avez et ce que vous voulez changer. Il est difficile de formuler une requête SQL sans avoir une bonne idée de ce que l'apparence des données.
En général, vos clés étrangères sont de type int et non pas varchars. De cette façon, vous n'avez pas ce type de problème. De cette façon, un seul enregistrement de l'employé peut être lié à de multiples tâches et il vous suffit d'utiliser l'ID de l'employé. Vous pouvez également disposer d'un tableau de référence qui lie les employés à des tâches en tant que bien. Cela signifie que 3 tables et pas seulement 2, mais il est une chose commune.
tEmpNum jEmpNum yEmpNum xEmpNum 0 15059 0 15059 13456 13456 13456 13456 15059 15059 15059 15059 15059 15059 15059 15059 15059 15059 15059 15059 -- Dire que je voulais mettre à jour chaque occurrence de 15059 à 13673? Bien que ces sont numériques, de nombreuses valeurs contenir du texte comme RH6754 et ce n'est pas. Merci. 🙂
OriginalL'auteur Hcabnettek | 2009-07-23
Vous devez vous connecter pour publier un commentaire.
Cela devrait faire l'affaire:
etc...
S'il vous plaît ne pas essayer de sortir sur le système de production (ou au moins faire d'abord une sauvegarde).
Aussi, vous pouvez utiliser une clause where pour cerner les choses beaucoup (probablement).
pas de lance, c'est certainement l'un dev de la base de données. lol
Juste pour mettre à jour toutes les parties intéressées; j'ai couru dans un peu d'un problème avec cela. Le type de données est de type varchar(7), si 'newstring' est même longueur ou plus courte que 'oldstring" tout est bien, mais quand j'ai essayé d'aller dans l'autre sens, les données seront tronqués erreurs élevés à leur tête laide. Moins efficace manière est venu à l'esprit et qui était de lancer une mise à jour sur chaque colonne de la procédure stockée comme Begin Update table1 SET champ1='newstring' where champ1='oldstring' FIN, puis faire la même requête pour champ2, champ3, filedn. Je suis sûr qu'il n'est pas efficace, mais le résultat est ce que je cherchais. Merci à tous!
OriginalL'auteur Lance Roberts
Pour SQL Server 2005, cela devrait faire l'affaire:
http://www.mssqltips.com/tip.asp?tip=1555
Permet de rechercher et remplacer dans toutes les colonnes sur toutes les tables. Assurez-vous de lire l'article.
OriginalL'auteur Ray
L'idée principale est de créer un SQL de mise à Jour de la phrase, n'importe comment beaucoup de champs de la table. Il a été créé sur SQL Server 2012, cependant, je pense qu'il travaille sur 2008.
Exemple de table:
Obtenir uniquement les champs varchar et nvarchar. Changement OLD_TEXT et NEW_TEXT accord à votre exigence. Changement system_type_id valeurs si vous avez besoin de correspondre non seulement champs varchar et nvarchar.
Le résultat de la dernière requête est:
il suffit de copier le résultat et d'exécuter dans SSMS. Cet extrait de code vous permet d'économiser un peu de temps lors de la rédaction de la mise à jour de la phrase.
Espère que cela aide.
OriginalL'auteur Daniel Corzo
En réponse à l'affiche de la question supplémentaire sur la façon de normaliser cette structure de données. Voici comment vous pouvez le faire:
Votre structure actuelle, où vous avez un tas de Task1, Task2, etc... colonnes dans le tableau de Projet, n'a clairement pas été conçu par quelqu'un qui comprenne les bases de données relationnelles.
Pendant le processus de cuisson, vous pourriez expliquer que sa conception de la viole les Première Forme Normale, tout en lui ordonnant de le "Répétition de groupes à travers les colonnes" section de cet article lié.
Ah, alors tous les paris sont ouverts 🙂 Pour ce que ça vaut si, c'est une affaire beaucoup plus importante que "un peu anormale". C'est la Première Forme Normale qui est violé, pas la 3ème. Il y a des circonstances qui appellent pour l'aplatissement des tables dans une manière qui duplique les données, mais ce n'est pas ce qui se passe ici. C'est juste de la douleur génération pour aucun avantage.
OriginalL'auteur Jason Kester