Comment passer un grand nombre de parameters dans une procédure stockée du code à SQL Server

Comment passer un grand nombre de parameters (disons 20+) à une procédure stockée à partir de code?

Comme nous pouvons regrouper tous les parameters dans un object de classe, puis le transmettre, mais comment le mettre en œuvre dans le cas de procédures stockées.

Actuellement, je dois créer plus de 20 variables pour passer des parameters.

Merci Ashwani

Si vous utilisez SQL Server 2008, utilisez un paramètre table . Si vous n’êtes pas familier, cela vous permet essentiellement de passer une table en tant que paramètre à une procédure stockée. L’avantage est que vous pouvez structurer le DataTable vous transmettez pour qu’il vous ressemble.

J’ai fait quelque chose comme ça et au lieu de passer des dizaines de parameters, je suis passé dans un seul TVP avec deux colonnes [KEY] et [VALUE]. Ainsi, lorsque vos parameters changent, il existe une couche d’abstraction pour isoler la migration. Bien entendu, la manière dont vous choisissez de la mettre en œuvre dépend de la situation.

Tout d’abord, examinez la conception qui requirejs autant de parameters: existe-t-il un moyen de réduire le besoin d’envoyer autant d’informations au serveur?

Deuxièmement, revenez au premier point car il «sent toujours mauvais» 🙂

Ensuite, vous pouvez faire des choses comme:

  • Fractionner la procédure stockée. Si vous n’êtes pas obligé de transmettre toutes les données en un seul bloc associé, vous pouvez alors scinder un SP en plusieurs parties distinctes de l’action globale (par exemple, mettre à jour le nom et les coordonnées de l’utilisateur séparément du dernier achat, ou peu importe)

  • combiner des parameters. Si vous avez cinq valeurs booléennes indiquant différentes options, vous pouvez les combiner en un seul octet “indicateurs” avec des opérations au niveau du bit. Ou bien, si vous avez deux entrées 32 bits ne contenant que des valeurs comsockets entre 0 et 5 000, elles pourraient être combinées en un seul entier 32 bits. etc.

  • Sérialisez tous les parameters dans un “format de fichier” et envoyez les données sous forme de paramètre binary ou texte unique, que vous désérialiserez dans votre procédure stockée.

Bien sûr, ces approches impliquent de coder et de décoder beaucoup de parameters à chaque fois, ce qui peut être pire que de les transmettre tous séparément. En effet, on pourrait dire que les mécanismes d’appel SQL font déjà ce qui précède pour vous.

Vous ne devriez normalement pas avoir besoin de beaucoup de variables pour stocker les parameters; vous devrez append SqlParameter (etc) par argument, mais vous pouvez les définir dans une boucle (/ etc).

La meilleure façon de le faire dans la version 2.0 consiste à transmettre un XML contenant tous vos parameters à la procédure stockée, puis à utiliser OPENXML pour obtenir chaque paramètre. Utilisez-le comme vous le souhaitez dans le SP.

Référer ces liens

Passage de parameters en tant que XML à une procédure stockée et à http://www.eggheadcafe.com/articles/20030627c.asp