SQL Server:存储过程IFNULL检查

时间:2012-09-24 16:35:28

标签: sql sql-server-2008 sql-server-2005 stored-procedures

Solution_id (Primary key, Int)
Col1 (varchar)
Col2 (varchar)
Col3 (varchar)
Col4 (varchar)
Col5 (varchar)

我正在编写一个存储过程来更新此表。上述6列有6个输入参数。

@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]

如何检查null / empty字符串并相应地生成更新查询以实现此目的?

4 个答案:

答案 0 :(得分:3)

这是否像你之后的那样?

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取两个值,如果第一个不为null则使用它,否则使用第二个值。

See MSDN for more information on ISNULL


<强>更新

我刚刚注意到你的评论,最后谈到空字符串......

  

如何检查null / empty字符串并相应地生成更新查询以实现此目的?

在这种情况下,您可以执行以下操作...

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

答案 1 :(得分: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 = ...

答案 2 :(得分:0)

仅检查Null,而不是空字符串:

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

答案 3 :(得分: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