Comment implémenter le scalaire Max dans SQL Server (comme Math.max). (En essence, je veux mettre en œuvre quelque chose comme Max (expression, 0), pour faire des valeurs négatives remplacées par 0.) p>
J'ai vu dans d'autres solutions de threads avec p>
Quel est le meilleur? Pourquoi SQL Server n'a-t-il pas quelque chose comme celui-ci intégré? Toute complications que je ne vois pas? P>
3 Réponses :
Vous souhaitez créer une fonction scalaire définie par l'utilisateur nommé Max dans SQL Server pour prendre deux paramètres comme entrée, une expression et une valeur min, puis renvoyez l'expression s'il dépasse la valeur min, sinon renvoyez la valeur minimale? < / p>
Je ne m'inquiéterais pas de la performance des fonctions scalaires, laissez le serveur le faire. J'utiliserais aussi si au lieu de cas de test pour> Valeur minimale. P>
SQL Server n'a pas de fonction intégrée pour vous parce qu'ils ne pensaient pas que ce serait assez utilisé, je suppose. p>
À propos de la performance des fonctions scalaires: ils peuvent être vraiment douloureux, mais je pense qu'il est prudent de supposer que, tant qu'il n'y a pas de logique de table / vue impliquée, ils devraient être assez rapides (comme des fonctions système intégrées?) - Rein 0 il y a
Si et le cas étre sont des types d'énoncés différents. Que vous puissiez utiliser si sur le cas dépend de l'endroit où vous souhaitez l'utiliser.
Dans tous les autres systèmes principaux, cette fonction s'appelle Vous pouvez faire un tas d'énoncés de cas ou utiliser quelque chose comme ceci: P> plus grand code>. SQL Server code> sérieusement EM> manque. P> SELECT (
SELECT MAX(expression)
FROM (
SELECT expression
UNION ALL
SELECT 0
) q
) AS greatest
FROM table_that_has_a_field_named_expression
C'est génial parce que si la première expression est un calcul compliqué et que vous comparez à une constante, il vous suffit d'écrire la calcul compliquée une fois!
Afin d'obtenir cette fonctionnalité dans le produit, veuillez voter sur l'élément Microsoft Connect: connect.microsoft.com/sqlserver/feedback/Détails/767183/...
Voté! Ce serait certainement un ajout utile!
Salut! Savez-vous si cela a été ajouté depuis que SQL Server? J'ai vérifié le lien MS Connect mais on dirait qu'ils ont fermé la fermeture de connexion. Merci.
Ok merci, j'ai déjà vérifié de plus, je n'ai rien trouvé. C'est dommage parce que je pense que d'autres SMDBMs l'ont.
La demande de fonctionnalité a été déplacée et peut être votée sur ici
L'optimiseur de requête doit empêcher l'expression d'être calculée plusieurs fois. P>
Pour la lisibilité / la maintenabilité, envisagez d'utiliser un CTE pour calculer l'expression avant la déclaration de cas. P>
Stackoverflow.com/Questtions/124417/...
Afin d'obtenir cette fonctionnalité dans le produit, veuillez voter sur l'élément Microsoft Connect: connect.microsoft.com/sqlserver/feedback/Détails/767183/...
La demande de fonctionnalité a été déplacée et peut être votée sur ici