2011-10-28 159 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'