2014-06-30 39 views
1
CREATE TABLE [dbo].[Table1] (
    [Id]  INT   IDENTITY (1, 1) NOT NULL, 
    [Column1] VARCHAR (3) NULL, 
    [Column2] VARCHAR (2) NULL, 
    [Column3] VARCHAR (255) NULL, 
    PRIMARY KEY CLUSTERED ([Id] ASC), 
    CONSTRAINT [TableCon] UNIQUE NONCLUSTERED ([Column1] ASC, [Column2] ASC, [Column3] ASC) 
); 

我的表允許在列(1-3)中使用空值,但每個記錄基於這三個值將是唯一的。然後,我將有一個功能GetID(c1, c2, c3)這將返回所述1D或沒有價值T-SQL查找記錄並允許爲空

我知道,我知道,這是不行的:

SELECT Id 
FROM Table1 
WHERE Column1 = @c1 
AND Column2 = @c2 
AND Column3 = @c3 

因此,如何將我寫這樣的事情?

+0

_why_將它不起作用?什麼輸入會給你錯誤的輸出? –

回答

2

由於null當與=運營商相比,不返回true,你必須與IS NULL運營商明確地查詢到:

SELECT Id 
FROM Table1 
WHERE ((Column1 = @c1) OR (Column1 IS NULL AND @c1 IS NULL)) AND 
     ((Column2 = @c2) OR (Column2 IS NULL AND @c2 IS NULL)) AND 
     ((Column3 = @c3) OR (Column3 IS NULL AND @c3 IS NULL)) 
+0

...或使其變得簡潔,您可以使用COALESCE功能。 –

+0

謝謝,我在想我需要一個CASE或IF,但是'Column1 IS NULL AND @ c1 IS NULL'是我缺少的那部分。我現在對過敏藥物感到困惑,現在我甚至無法正確拼寫我的名字,所以我錯過了那麼明顯的東西。 – Will