SQL таңдау операторы жолдарды қайтармайтынын тексеріңіз

Менің таңдауым бар

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

Бұл мәлімдеме 0 жолды қайтаратындығын тексергім келеді. ISNULL және IFNULL-ды қолдануға тырыстым, бірақ бір нәрсе жоғалтқан сияқты.

18
иә null Мен жолдарды білдіреді
қосылды автор Islam, көзі
Жақсы рахмет, бұл мен жасаған және бұл жақсы жұмыс істейді DECLARE @NULL int SET @ NULL = (SELECT COUNT (QBalance) FROM dbo.CustomerBalance WHERE (CustomerID = @CustomerID) AND (MarchentID = @MerchantId)) IF @ NULL = 0 BEGIN [CustomerBalance] ([CustomerID], [MarchentID], [QBalance], [Init & zwnj; ialDate]) ішіне кірістіріңіз VALUES (@ CustomerID, @ MerchantId, @ CodeQPoints, GETDATE ()) END ELSE UPDATE [CustomerBalance ] SET QBalance = @ CodeQPoints + QBalance, InitialDate = GETDATE() WHERE [email protected] және [email protected]
қосылды автор Islam, көзі
Null арқылы QBalance ішінде ешқандай жолдар немесе нақты Null мәнін білдіресіз бе? Ал сіз бос болмасаңыз, не істегіңіз келеді?
қосылды автор Jamie F, көзі
Болашақта сізге көмектесу үшін ешқандай жол бос емес. (Бұл сұрақты Жоқ жолдарға өзгерту үшін өзгерту керек және сіз не болғыңыз келетінін көрсетіңіз.)
қосылды автор Jamie F, көзі

6 жауаптар

Сәйкес жолдардың бар-жоғын білу үшін NOT EXISTS қолдануға болады. Барлық сәйкес жолдарды санаудан неғұрлым тиімді болуы мүмкін

IF NOT EXISTS(SELECT * FROM ...)
BEGIN
PRINT 'No matching row exists'
END
36
қосылды

Егер бұл SQL Server болса, @@ ROWCOUNT .

7
қосылды
SELECT    COUNT(*) 
FROM         dbo.CustomerBalance 
WHERE     (CustomerID = 1) AND (MarchentID = @MerchantId) 

0 болса, сіз 0 алды. :)

7
қосылды

мына әрекетті орындаңыз:

SELECT     ISNULL(QBalance, 'ReplaceValue')
FROM         dbo.CustomerBalance
WHERE     (CustomerID = 1) AND (MarchentID = @MerchantId)
1
қосылды
@Jordan_Walters - Бұл жұмыс істемейді. Жоқ жолдар болмаса, ISNULL қолданылатын мән жоқ.
қосылды автор Martin Smith, көзі
Өте қарапайым, өте жақсы
қосылды автор Jordan_Walters, көзі

Сыртқы 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 @@ROWCOUNT <> 0 
  PRINT 'Select statement is returning some rows'
ELSE 
  PRINT 'No rows returned' 
0
қосылды