Je veux utiliser du curseur pour supprimer l'enregistrement de la table. Comment puis-je le faire?
J'utilise MSSQL 2008 Express Ce code ne supprime rien de #Temp. J'ai aussi essayé d'où le courant du cursor_name n'a pas fonctionné. P>
Voici mon code d'exemple: p> merci d'avance p> p> P>
3 Réponses :
Pourriez-vous s'il vous plaît essayer de ci-dessous, merci pour votre temps.
Vous avez récupéré les données du curseur, mais vous n'avez pas appuyé dans vos variables manquées dans update: strong>
J'ai des changements dans l'instruction 2ND récupération en regard de Employee_cursor pendant code> boucle, s'il vous plaît jeter un oeil sur Sous le code, merci. p>
FETCH code>, vous avez simplement ajouté ci-dessous la partie en surbrillance, merci p>
Comment c'est différent de mon seul? , eh bien j'ai essayé mais je n'ai pas travaillé, de toute façon merci pour vous intéout
Désolé, pour une réponse tardive, cependant, je vais changer ma réponse, s'il vous plaît jeter un coup d'œil dessus, merci
Lorsque le code a l'air si similaire à l'original, il est généralement utile de mettre en évidence ce qui a été changé (je suppose qu'il ajoute le dans code> sur le second
extraire code>, car c'est ce que j'étais sur le point de répondre)
Eh bien, j'ai une réponse mais je ne peux pas le poster
@Elias Hossain Oui ça marche mais pourquoi deux tables, je pense que cela peut être fait avec celui que je viens de poster une manière, vérifiez cela aussi, merci d'avoir pris intérêt
use AdventureWorks select * into #temp from HumanResources.Employee; declare @eid as int; declare @nid as varchar(15); DECLARE Employee_Cursor CURSOR FOR SELECT A.EmployeeID, A.NationalIDNumber FROM #temp AS A OPEN Employee_Cursor; FETCH NEXT FROM Employee_Cursor INTO @eid , @nid ; WHILE @@FETCH_STATUS = 0 BEGIN IF (@eid > 10) BEGIN delete from #temp where current of Employee_Cursor END FETCH NEXT FROM Employee_Cursor INTO @eid , @nid ; END; CLOSE Employee_Cursor; DEALLOCATE Employee_Cursor; select * from #temp drop table #temp this works for me
Il y a une réponse beaucoup plus simple - utilisez cette commande: Ça s'appelle "Positionné Supprimer" et décrit à msdn . p> p>
Pour l'amour de tout ce qui est saint, pourquoi utilisez-vous un curseur pour le faire au lieu d'une simple requête Supprimer? Avez-vous une rancune contre votre DBA?
Question idiote mais avez-vous un employé de 10 ans dans la table des employés ?? Aussi pourquoi voulez-vous faire un curseur pour cela? C'est une méthode très inefficace. Assurez-vous également qu'il n'y a pas de déclencheurs qui abandonnent votre suppression.
@Johnfx non je suis juste curieux de le faire, juste pour apprendre, dans la pratique, je utilise aussi des déclarations de suppression simples
@Johnfx peut-être qu'il veut juste s'assurer de créer autant de contention que possible: d un curseur sur TEMPDB semble un bon moyen. J / K Vivek Kinda.
@Vivek - Ne pratiquez pas le mal. Vous pourriez être bon à cela.