2011-11-08 4 views
0

J'ai une table qui contient 10000 enregistrements, maintenant j'ai ajouté le champ pour placer le mot de passe en clair, alors maintenant je veux mettre à jour tous les enregistrements, mais devrait mettre à jour le nouveau champ sur le base du nom d'utilisateur ... comme ci-dessous.Comment mettre à jour en vrac dans SQL Server 2008

update users set secdetail = case when username = 'abbas' then '[email protected]' .... end 

je cours cette requête à partir du code .net, en utilisant sqlcommand, chaque fois que je tente de rafraîchir la pagem après le chargement pendant un certain temps, je reçoit un message disant:

The query processor ran out of stack space during query optimization. Please simplify the query 

S'il vous plaît aider.

+0

Le « cas » (comme la commande) n'est pas dans la logique de la sql, est juste ici pour aide pour quelques cas, mais pas pour la mise à jour 10k enregistrements utilisent dedans. Suivez ce que Greg suggère. – Aristos

Répondre

1

Pourquoi ne pas créer une boucle dans votre code .NET pour produire des déclarations de mise à jour de SQL correcte séparés par semicolins

Update Users Set Secdetail = '[email protected]' Where Username = 'abbas'; 
Update Users Set Secdetail = '[email protected]' Where Username = 'bbbas'; 
Update Users Set Secdetail = '[email protected]' Where Username = 'cbbas'; 
... 
+0

Greg: ne sera pas lourd pour le SqlCommand d'exécuter des instructions de mise à jour 5000 ... – Abbas

+0

[This] (http://stackoverflow.com/questions/6016475/what-is-better-dynamic-sql-or-where-case/6016488 # 6016488) indique que vous ne devez pas utiliser d'instructions de requête pour les jeux de données volumineux – Greg