Je veux convertir une table stockant des données de paire valeur Nom à la forme relationnelle dans SQL Server 2008.Mise à jour des données non validées à une cellule avec dans une instruction UPDATE
table Source
Strings
ID Type String
100 1 John
100 2 Milton
101 1 Johny
101 2 Gaddar
cible requise
Customers
ID FirstName LastName
100 John Milton
101 Johny Gaddar
Je suis la stratégie donnée ci-dessous,
Peupler la Cus Table tomer avec des valeurs d'identité dans le tableau des chaînes
INSERT INTO CUSTOMERS SELECT DISTINCT ID FROM Strings
Vous obtenez le
Customers
ID FirstName LastName
100 NULL NULL
101 NULL NULL
Les clients de mise à jour ci-dessous avec le reste des attributs en se joignant à l'aide de chaînes colonne ID. De cette façon, chaque enregistrement dans les clients aura 2 enregistrements correspondants correspondants.
UPDATE Customers
SET FirstName = (CASE WHEN S.Type=1 THEN S.String ELSE FirstName)
LastName = (CASE WHEN S.Type=2 THEN S.String ELSE LastName)
FROM Customers
INNER JOIN Strings ON Customers.ID=Strings.ID
Un état intermédiaire sera llike,
ID FirstName LastName ID Type String
100 John NULL 100 1 John
100 NULL Milton 100 2 Milton
101 Johny NULL 101 1 Johny
101 NULL Gaddar 101 2 Gaddar
Mais cela ne fonctionne pas comme prévu. Car lors de l'affectation des valeurs dans la clause SET
, seules les valeurs validées sont définies à la place des valeurs non validées. Y at-il de toute façon pour définir des valeurs non validées (avec dans le temps de traitement de la requête) dans UPDATE
instruction? Je ne suis pas à la recherche de solutions de rechange, mais je fais mon approche en disant à SQL Server d'utiliser des données non validées pour UPDATE
.
C'est encore la même chose que la réponse 1. Au lieu de faire des mises à jour séparées, vous utilisez plusieurs jointures. Cela provoquera également plusieurs analyses sur la table de chaînes que je veux éviter. Et je ne cherche pas de solutions alternatives, mais fais que mon approche fonctionne en disant à SQL Server d'utiliser des données non validées. Merci quand même. Appréciez l'effort :) – Faiz
Avez-vous jeté un coup d'œil à READUNCOMMITTED hint? –
J'ai essayé de régler le NIVEAU D'ISOLATION juste au-dessus de l'instruction pour READ UNCOMMITTED mais cela ne fait aucune différence (SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;). Je pensais que cela n'aurait aucun effet avec "dans les changements de requête" – Faiz