更新存储过程中可能为null的字段

时间:2013-09-28 21:58:14

标签: jquery sql-server database sql-server-2008-r2

我有一个包含两列可能为null的表。

我想构建一个存储过程来编辑该表。在存储过程中我这样做了:

@ID INT,
    @newBuildingName NVARCHAR(250),
    @newLocation NVARCHAR(3000),
    @newImage VARBINARY(MAX) = NULL,
    @newNote NVARCHAR(3000) = NULL,
    @result BIT OUTPUT

如果用户输入了newImagenewNote字段的值,我不能在这一点上做出决定,所以我不能说

UPDATE myTable SET image = @newImage, note = @newNote

因为这两个字段可能已经有值,所以我会删除这些字段,

我该怎么办?

我的意思 创建一个if-else语句,并尝试第一个字段为空,所以如果没有它,请进行更新然后如果我的第二个字段为null,则在没有它的情况下创建我的更新语句,如果它们都不为null,则进行完整更新语句但我认为这是一个非常依赖的过程。

还有其他解决方案吗?

提前致谢

3 个答案:

答案 0 :(得分:1)

以这样的方式制作if-else语句,您可以在不实际提交更新的情况下决定要更新的实体。

您的代码中必须已具有整个实体的值,例如您的模型。请检查以下情况。

if(!String.IsNullOrEmpty(@newImage))
{
     //include the values @newImage to the entity to update
}
if(!String.IsNullOrEmpty(@newNote))
{
     //include the values @newNoteto the entity to update
}
EntityToUpdate.saveChangestoDB();

答案 1 :(得分:1)

您可以使用合并功能:

UPDATE myTable 
SET 
    image = COALESCE(@newImage,image),
    note = COALESCE(@newNote,note)

如果image不为null,则不会更改。注释列

也是如此

答案 2 :(得分:0)

试试这个:

UPDATE myTable 
SET image = CASE WHEN image IS NULL THEN @newImage ELSE image END
,note = CASE WHEN note IS NULL THEN @newNote ELSE note END

当然您也可能想要使用ISNULL功能......例如

note = CASE WHEN ISNULL(note,'') = '' THEN @newNote ELSE note END

处理两个音符IS NULL和音符等于''(空字符串)