2016-04-22 81 views
0
ColA ColB ColC 

123  Null Null 

120  Null Null 

Null 1  2 

Declare @ColA as Int = 123 

--Rough draft, this doesn't work though 

--I'm going to pass this above variable to SQL query.. 

Select * 

from @TblA 

Where @ColA = ColA or (@ColA <> ColA and ColA is Null) 

需要一個SQL語句,從而SQL查詢來獲取任何匹配的記錄,否則爲NULL記錄

  1. 如果對可樂匹配,則只能得到匹配的記錄可樂

  2. 如果ColA上沒有匹配,然後獲得Col A中空值的記錄只有

+0

這是可能的。查看EXISTS()函數以獲得提示。 –

+0

我已經嘗試過了......基於你傳遞給變量的數據,我的sql應該只獲取那些記錄,如果沒有匹配,那麼爲ColA獲取Null值行。 – Ken

+0

您可以顯示您嘗試使用EXISTS()函數的查詢嗎?那裏有一個可行的解決方案,所以你必須在執行過程中犯了一個錯誤。 –

回答

1

您可以嘗試像下面這樣的查詢:

SELECT * FROM @TblA 
WHERE @ColA=ColA AND EXISTS(SELECT 1 FROM @TblA WHERE @ColA=ColA) 
UNION 
SELECT * FROM @TblA 
WHERE ColA IS NULL AND NOT EXISTS (SELECT 1 FROM @TblA WHERE @ColA=ColA) 

基於以下

是您的更新這相當於

IF EXISTS(SELECT 1 FROM @TblA WHERE @ColA=ColA) 
    SELECT * FROM @TblA WHERE @ColA=ColA 
ELSE 
    SELECT * FROM @TblA WHERE ColA IS NULL 

,有2個變量@ColA和@ColB。 1.如果@ColB值,那麼比賽得到@ColA =可樂記錄與COLB = @ColB和也爲Null值COLB沿,如果有任何的可樂,但必須有沒有任何錯配或空值

精確匹配更新查詢:

SELECT * FROM @TblA 
WHERE 
@ColA=ColA AND 
ISNULL(ColB, @ColB)= @ColB AND 
EXISTS(SELECT 1 FROM @TblA WHERE @ColA=ColA) 
UNION 
SELECT * FROM @TblA 
WHERE 
    ColA IS NULL AND 
    ISNULL(ColB, @ColB)= @ColB AND 
    NOT EXISTS (SELECT 1 FROM @TblA WHERE @ColA=ColA) 
+0

它也將得到我空行與匹配行 – Ken

+0

@Ken更新回答 – DhruvJoshi

+0

它的工作原理,但如果我必須做與列B相同,我將如何更改我的sql查詢? – Ken

0

,我認爲這會工作

Where isnull(ColA,@ColA) = @ColA 

測試代碼返回2條記錄,比賽進行到第1和空

DECLARE @testTbl TABLE (colA INT, colB INT, colC INT) 

INSERT INTO @testTbl (colA, colB, colC) VALUES (1, 2, 3) 
INSERT INTO @testTbl (colA, colB, colC) VALUES (4, 5, 6) 
INSERT INTO @testTbl (colA, colB, colC) VALUES (null, 7, 8) 

DECLARE @colA INT 
SET @colA = 1 

SELECT * FROM @testTbl WHERE ISNULL(colA, @colA) = @colA