web-dev-qa-db-fra.com

Vérifier si une instruction SQL Select ne renvoie aucune ligne

J'ai une déclaration choisie 

SELECT     QBalance
FROM         dbo.CustomerBalance
WHERE     (CustomerID = 1) AND (MarchentID = @MerchantId)

Je veux vérifier si cette instruction renvoie 0 lignes. J'ai essayé d'utiliser l'ISNULL et l'IFNULL mais il me manque quelque chose.

19
Islam

Pour savoir s'il n'existe aucune ligne correspondante, vous pouvez utiliser NOT EXISTS. Ce qui peut être plus efficace que de compter toutes les lignes correspondantes

IF NOT EXISTS(SELECT * FROM ...)
BEGIN
PRINT 'No matching row exists'
END
41
Martin Smith
SELECT    COUNT(*) 
FROM         dbo.CustomerBalance 
WHERE     (CustomerID = 1) AND (MarchentID = @MerchantId) 

Si vous obtenez 0, vous en avez 0. :)

7
Stuart Ainsworth

S'il s'agit de SQL Server, essayez @@ ROWCOUNT .

7
Dave

essaye ça:

SELECT     ISNULL(QBalance, 'ReplaceValue')
FROM         dbo.CustomerBalance
WHERE     (CustomerID = 1) AND (MarchentID = @MerchantId)
1
user1018734

Vous pouvez utiliser @@ ROWCOUNT. Par exemple 

SELECT     QBalance
FROM         dbo.CustomerBalance
WHERE     (CustomerID = 1) AND (MarchentID = @MerchantId)

--This will return no of rows returned by above statement.
SELECT @@ROWCOUNT

Vous obtiendrez 0 si la première instruction ne renverra aucune ligne. Vous pouvez également utiliser if pour vérifier cela juste après la première déclaration. par exemple. 

IF @@ROWCOUNT <> 0 
  PRINT 'Select statement is returning some rows'
ELSE 
  PRINT 'No rows returned' 
0

Pourrait également utiliser un contrôle externe ISNULL?

SELECT ISNULL((
SELECT QBalance
FROM   dbo.CustomerBalance
WHERE  (CustomerID = 1) AND (MarchentID = @MerchantId)), 0)
0
Chethan Shetty