0

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

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

@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声明并尝试第一个字段是否为空,所以我的更新没有它,然后如果我的第二个字段为空,那么我的更新语句没有它,如果它们都不是空的,那么做一个完整的更新声明但是我认为这是一个非常乏味的过程。

请问还有其他解决方案吗?

提前致谢

4

3 回答 3

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();
于 2013-09-28T22:02:17.330 回答
1

您可以使用合并功能:

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

如果图像不为空,则不会更改。注释栏也是如此

于 2013-09-28T22:18:43.103 回答
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

处理 note IS NULL 和 note 等于 '' (空字符串)

于 2013-09-28T23:16:33.863 回答