2011-10-28 210 views
16

我有一個select語句檢查SQL SELECT語句不返回行

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

我要檢查如果語句返回0行。我試圖使用ISNULL和IFNULL,但似乎我錯過了一些東西。

+1

By Null你是指沒有行或QBalance中的實際Null值?如果你得到空值,你想怎麼做? –

+0

yes by null我的意思是沒有行 – Islam

+0

爲了幫助您將來,沒有行與null不同。 (你應該編輯這個問題改爲No Rows,並指定你想要發生的事情。) –

回答

1

試試這個:

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

很簡單,很漂亮 –

+6

@Jordan_Walters - 雖然不起作用。如果沒有行存在,則沒有值應用「ISNULL」。 –

7
SELECT COUNT(*) 
FROM   dbo.CustomerBalance 
WHERE  (CustomerID = 1) AND (MarchentID = @MerchantId) 

如果你得到0,你有0 :)

34

要確定是否存在沒有匹配的行,可以使用NOT EXISTS。這可以比計算所有匹配的行更有效

IF NOT EXISTS(SELECT * FROM ...) 
BEGIN 
PRINT 'No matching row exists' 
END 
0

還可以使用外部ISNULL檢查嗎?

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

您可以使用@@ ROWCOUNT。對於例如

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

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

如果第一條語句不返回任何行,您將得到0。您也可以使用if語句來檢查第一條語句之後。例如

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