Comment suis-je capable de faire fonctionner cela Je veux ajouter à la clause si la valeur n'est pas vide et ne pas écrire la clause in si le la valeur est vide. J'ai déjà essayé d'utiliser OU et ça fonctionne mais ne me donne pas les résultats que je veux. J'utilise SQL Server 2008.Ajouter plusieurs clauses dans si la variable est vide ou non (procédure stockée) SQL Server
Mes variables sont:
@orderNumber varchar(max),
@itemCode varchar(max),
@shipTo varchar(max),
@orderQty varchar(max),
@orderType varchar(max)
Maintenant, je pris un tas de la procédure stockée comme il est un total de 600 lignes, mais cela devrait expliquer exactement ce que je veux faire . J'ai cherché haut et bas et n'ai trouvé aucune solution pour cela.
La requête est:
SELECT
u.INVENTORY_ITEM_ID, u.ORDER_TYPE,
u.ORDER_QTY, u.ORDER_NUMBER,
u.SHIP_TO_NAME, u.ITEM_CODE AS SET_BOX,
ii.ITEM_CODE,
U.LANGUAGE_DESC
FROM
UnReleased_DeliveriesSet u
JOIN
SetDetails s ON u.item_code = s.SetCode
FULL OUTER JOIN
InventorySetBox i ON u.ITEM_CODE = i.ITEM_CODE
FULL OUTER JOIN
InventorySetBox ii ON ii.ITEM_CODE = s.ItemCode
FULL OUTER JOIN
SET_BOX_TYPE SB ON SB.ITEM_CODE = u.ITEM_CODE
WHERE
u.item_code LIKE '%.set%'
AND u.item_code NOT LIKE '%NN-%SET%'
AND ii.ITEM_CODE IS NOT NULL
AND ii.SUBINVENTORY_CODE <> 'BMS'
AND u.ITEM_CODE NOT IN ('inner query')
Voici ce que je veux faire:
AND
CASE WHEN @itemCode != ''
THEN u.ITEM_CODE IN (SELECT items FROM dbo.Split(@itemCode,','))
WHEN @orderType != ''
THEN u.ORDER_TYPE IN (SELECT items FROM dbo.Split(@orderType,','))
WHEN @orderQty != ''
THEN u.ORDER_QTY IN (SELECT items FROM dbo.Split(@orderQty, ','))
WHEN @orderNumber != ''
THEN u.ORDER_NUMBER IN (SELECT items FROM dbo.Split(@orderNumber, ','))
WHEN @shipTo != ''
THEN u.SHIP_TO_NAME in (SELECT items FROM dbo.Split(@shipTo, ','))
END
GROUP BY
u.INVENTORY_ITEM_ID, u.ITEM_CODE,
U.LANGUAGE_DESC,
i.item_box_quantity,
sb.BOX_TYPE, sb.set_box_qty,
ii.ITEM_CODE,
S.SetCode, RELEASED_STATUS,
u.ORDER_TYPE, u.ORDER_QTY, u.ORDER_NUMBER, u.SHIP_TO_NAME
Avez-vous envisagé d'utiliser la table des paramètres évalués au lieu des listes délimitées? Il est plus facile de travailler avec et ils seront beaucoup plus rapides que n'importe quel diviseur peut même penser. –
Ma fonction de division est une fonction de valeur de table. Est-ce cela que vous voulez dire? –
Oui. les paramètres de table sont incroyablement rapides et super simples à travailler. –