2013-08-30 5 views
1

Essentiellement, j'aimerais pouvoir créer une fonction scalaire qui accepte un nombre variable de paramètres et les concaténer ensemble pour renvoyer un seul VARCHAR. En d'autres termes, je veux pouvoir créer un repli sur un nombre incertain de variables et retourner le résultat du repli en VARCHAR, similaire à .Aggregate en C# ou Concatenate en Common Lisp.Paramètres optionnels infinis

Mon code pseudo (procédure) pour une telle fonction est la suivante:

  1. définir une variable VARCHAR
  2. foreach paramètre non nul convertir en un VARCHAR et l'ajouter à la variable VARCHAR
  3. renvoie la variable VARCHAR comme le résultat de la fonction

Existe-t-il une manière idiomatique de faire quelque chose comme ça dans MS-SQL? Est-ce que MS-SQL Server a quelque chose de similaire au paramètre C# params/Common Lisp & reste keyword?

- EDIT -

Est-il possible de faire quelque chose de semblable à cela sans l'aide des paramètres table, de sorte qu'un appel à la fonction pourrait ressembler à:

MY_SCALAR_FUNC ('A', NULL, 'C', 1)

au lieu d'avoir à passer par le rigmarole de mise en place et d'insertion dans une nouvelle table temporaire à chaque fois que la fonction est appelée?

Répondre

1

Pour un ensemble d'éléments, vous pourriez envisager de passer une table de valeurs à votre fonction?

Pass table as parameter into sql server UDF

Voir aussi http://technet.microsoft.com/en-us/library/ms191165(v=sql.105).aspx

Pour répondre directement à votre question, non, il n'y a pas d'équivalent au mot-clé params. L'approche que j'utiliserais est celle ci-dessus - Créez un type de table défini par l'utilisateur, remplissez cette ligne par valeur et passez-la à votre fonction scalaire pour qu'elle fonctionne.

EDIT: Si vous voulez éviter les paramètres de table, et sont sur SQL 2012, regardez la fonction CONCAT:

http://technet.microsoft.com/en-us/library/hh231515.aspx

CONCAT (string_value1, string_value2 [, string_valueN ]) 

Ceci est seulement pour la fonction CONCAT intégrée, vous Impossible de rouler soi-même avec la déclaration de style "params".

+0

Désolé, j'aurais dû être plus clair. Je cherchais spécifiquement à éviter les paramètres de table, je vais mettre à jour la question pour la rendre plus claire. –

+0

@BenH J'ai édité dans une option, applicable uniquement pour la concaténation de chaînes et aussi uniquement sur SQL 2012 si cela aide? – Meff

+0

Ça aide, merci Meff. Cela me fait me demander comment ils ont réalisé la mise en œuvre de cette fonction. Nous n'utilisons pas 2012 pour ce projet particulier, mais nous sommes sur d'autres et je n'étais pas au courant de cette fonction, alors merci. –