1

J'ai quelque chose de similaire à la clause WHERE suivante dans mon instruction SQL:Une meilleure façon d'écrire cette clause SQL where

AND (ipdp.UserID!=dbo.fn_userid(ipdp.ItemID) OR dbo.fn_userid(ipdp.ItemID) IS NULL) 

Cependant, je n'aime pas comment dbo.fn_userid fonction est couru deux fois. Comment puis-je améliorer cette ligne de code pour qu'elle ne soit exécutée qu'une seule fois?

ipdp.UserID est toujours une valeur Integer non NULL

dbo.fn_userid peut retourner une valeur NULL ou une valeur entière

Cheers.

+0

Etes-vous sûr qu'il fonctionne deux fois? La fonction a-t-elle des effets secondaires ou est-ce qu'elle ne fait que répéter une valeur à une autre de façon répétitive? – Rup

+0

C'est dans ma clause WHERE à deux reprises, donc à ma connaissance, il fonctionne deux fois? La même valeur de paramètre est passée les deux fois donc je voudrais réduire cette utilisation. – Curt

+0

Dans votre code ci-dessus, la fonction sera exécutée deux fois seulement si le test dans le() est faux. Pourriez-vous montrer plus de la clause where? –

Répondre

4

Essayez:

AND ipdp.UserID != ISNULL(dbo.fn_userid(ipdp.ItemID), -1) 
+0

Merci Michael, j'avais vraiment pensé à faire quelque chose comme ça, mais je ne savais pas à quel point ce serait efficace. Merci encore – Curt