2009-11-04 6 views
1

J'ai une table temporaire (ou, disons, une fonction qui renvoie une table de valeurs).Exécuter des instructions pour chaque enregistrement d'une table

Je souhaite exécuter des instructions pour chaque enregistrement de la table. Est-ce que cela peut être fait sans utiliser de curseurs?

Je ne suis pas contre les curseurs, mais je voudrais une syntaxe plus élégante.

Quelque chose comme cette syntaxe maquillée au hasard:

for (select A,B from @temp) exec DoSomething A,B 

J'utilise Sql Server 2005.

+0

Soyez plus précis. En ce moment votre question est sans réponse –

+0

J'ai un proc stocké: DoSomething qui prend un varchar (255) comme paramètre. Je veux 'sélectionner [nom] de foomaster où id <100' et exécuter DoSomething pour chaque [nom] qui est retourné. Mais il semble que les curseurs soient la façon la plus simple de le faire. –

Répondre

1

Je ne pense pas que ce que vous voulez est de facile. Ce que j'ai trouvé, c'est que vous pouvez créer une fonction scalaire en prenant les arguments A et B, puis, depuis la fonction, exécuter une procédure stockée étendue. Cela pourrait atteindre ce que vous voulez faire, mais il semble que cela pourrait rendre le code encore plus complexe.

Je pense que pour des raisons de lisibilité et de maintenabilité, vous devriez vous en tenir à la mise en œuvre de CURSOR.

+0

Oui, je pense que vous avez raison. J'ai regardé autour et les curseurs sont à peu près la manière standard de le faire. –

0

Je voudrais regarder dans changer le proc stocké de sorte qu'il puisse fonctionner contre un ensemble de données plutôt qu'une entrée de rangée simple.

0

Est-ce que CROSS/OUTER APPLY ferait ce que vous voulez si vous avez besoin de traitement RBAR.

C'est élégant, mais cela dépend du traitement que vous devez faire

Questions connexes