Comment puis-je rechercher un paramètre de valeur de table nul ou vide?


9

J'ai une procédure stockée (SS2k8) avec quelques paramètres table qui seront parfois nuls ou vides. J'ai vu ce post StackOverflow qui dit que les TVP nuls / vides devraient simplement être omis de la liste des paramètres d'appel. Mon problème est que je ne peux pas comprendre comment vérifier la présence de vide ou de null dans la procédure stockée car "IF (@tvp IS NULL)" échoue lors de la création de la procédure avec le message "Doit déclarer la variable scalaire" @tvp "'. Dois-je faire un SELECT COUNT (*) sur le TVP et vérifier zéro?

Extrait de code:

CREATE PROCEDURE [foo] (@tvp [TvpType] READONLY) AS

IF (@tvp IS NOT NULL) -- doesn't work
BEGIN
  -- lots of expensive processing
END
ELSE
BEGIN
  -- a little bit of cheap processing
END
...

Réponses:


14

Une table ne peut pas l'être NULL, pas plus qu'un TVP. Comment vérifiez-vous si une table est vide? Vous ne dites certainement pas IF Sales.SalesOrderHeader IS NULL. :-)

IF EXISTS (SELECT 1 FROM @tvp)
BEGIN
  -- lots of expensive processing
END
ELSE
BEGIN
  -- a little bit of cheap processing
END
...

3

Le paramètre de valeur de table ne sera pas nul. Traitez-le plus comme une table et @aaraon Bertrand m'a battu au punch. Alors oui, vérifiez s'il y a des lignes.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.