web-dev-qa-db-fra.com

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

J'ai une procédure stockée (SS2k8) avec quelques paramètres table qui seront parfois nuls ou vides. J'ai vu ceci StackOverflow post 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 si vide ou nul 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
...
9
Dan

Une table ne peut pas ê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
...
14
Aaron Bertrand

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.

3
billinkc