2012-09-24 88 views
1
Solution_id (Primary key, Int) 
Col1 (varchar) 
Col2 (varchar) 
Col3 (varchar) 
Col4 (varchar) 
Col5 (varchar) 

我在寫一個存儲過程來更新此表。上述6列有6個輸入參數。SQL Server:存儲過程IFNULL檢查

@Attached_File1 VARCHAR(MAX), 
@Attached_File2 VARCHAR(MAX), 
@Attached_File3 VARCHAR(MAX), 
@Attached_File4 VARCHAR(MAX), 
@Attached_File5 VARCHAR(MAX), 
@Ticket_ID BIGINT 

我想寫一個SQL查詢,它將使用輸入參數中指定的值更新表。但我不能用null覆蓋附件列。我的意思是我只需要使用那些包含數據的參數。

例如,如果表中有一排

[10, "aaa", "bbb", "efg", null, null] 

和輸入參數

(10, null, null, "mno", "ddd", null) 

在更新後的行會成爲

[10, "aaa", "bbb", "mno", "ddd", null] 

如何檢查爲空/空字符串,並相應地生成更新查詢來實現這一目標?

回答

2

這是不是像你後?

UPDATE mytable 
SET Col1 = ISNULL(@Attached_File1, Col1), 
    Col2 = ISNULL(@Attached_File2, Col2), 
    Col3 = ISNULL(@Attached_File3, Col3), 
    Col4 = ISNULL(@Attached_File4, Col4), 
    Col5 = ISNULL(@Attached_File5, Col5) 
WHERE Solution_id = @Ticket_ID 

ISNULL取兩個值,如果第一個不爲空,然後它被使用,否則使用第二值。

See MSDN for more information on ISNULL


更新

我只注意到月末,該談空字符串您的評論...

如何檢查空/空字符串並相應地生成更新查詢以實現此目的?

在這種情況下,你可以做以下...

UPDATE mytable 
SET Col1 = ISNULL(NULLIF(@Attached_File1,''), Col1), 
    Col2 = ISNULL(NULLIF(@Attached_File2,''), Col2), 
    Col3 = ISNULL(NULLIF(@Attached_File3,''), Col3), 
    Col4 = ISNULL(NULLIF(@Attached_File4,''), Col4), 
    Col5 = ISNULL(NULLIF(@Attached_File5,''), Col5) 
WHERE Solution_id = @Ticket_ID 

它使用NULLIF聲明它有兩個值,如果第一個值是一樣的第二個值,則是NULL返回,否則返回第一個值。

See MSDN for more information on NULLIF

+0

嗨,感謝您的回答,但是當我的參數爲空時,它將覆蓋現有表值爲NULL。 – user1681514

+1

Hi @ user1681514,我只是給了你一個相同解決方案的3個人之一,這個解決方案會指出存儲過程的不同部分存在問題(或者是使用該存儲過程的代碼) – freefaller

+0

看起來像它的東西否則導致像你所說的問題。謝謝你的幫助 !我會試圖找出 – user1681514

2
update YourTable 
set  col1 = isnull(@Attached_File1, col1) 
,  col2 = isnull(@Attached_File2, col2) 
,  col3 = isnull(@Attached_File3, col3) 
,  ... 
where Solution_ID = @Ticket_ID 

如果參數可以包含空字符串,請考慮@freefaller的答案。如果它可以包含whitepsace,嘗試:

set  col1 = case 
       when @Attached_File1 like '%[^ \t\r\n]%' then @Attached_File1 
       else col1 
       end 
,  col2 = ... 
0

檢查只爲空值,而不是爲空字符串:

UPDATE 
    tableX 
SET 
    Col1 = COALESCE(@Attached_File1, Col1), 
    ... 
    Col5 = COALESCE(@Attached_File5, Col5) 
WHERE 
    Solution_id = @Ticket_ID ; 
+0

我試過,但如果我的輸入參數具有空值。它將列值覆蓋爲空 – user1681514

+0

對不起,錯過了'@'。當參數中有空值時,你確定它會覆蓋嗎?什麼時候有空弦? –

0

我想試試這個:

UPDATE Table 
SET 
    Col1 = ISNULL(@Attached_File1, Col1), 
    Col2 = ISNULL(@Attached_File1, Col2), 
    Col3 = ISNULL(@Attached_File1, Col3), 
    Col4 = ISNULL(@Attached_File1, Col4), 
    Col5 = ISNULL(@Attached_File1, Col5), 
WHERE 
    Solution_Id = @Ticket_ID