我有一个包含两列可能为null的表。
我想构建一个存储过程来编辑该表。在存储过程中我这样做了:
@ID INT,
@newBuildingName NVARCHAR(250),
@newLocation NVARCHAR(3000),
@newImage VARBINARY(MAX) = NULL,
@newNote NVARCHAR(3000) = NULL,
@result BIT OUTPUT
如果用户输入了newImage
或newNote
字段的值,我不能在这一点上做出决定,所以我不能说
UPDATE myTable SET image = @newImage, note = @newNote
因为这两个字段可能已经有值,所以我会删除这些字段,
我该怎么办?
我的意思
创建一个if-else
语句,并尝试第一个字段为空,所以如果没有它,请进行更新然后如果我的第二个字段为null,则在没有它的情况下创建我的更新语句,如果它们都不为null,则进行完整更新语句但我认为这是一个非常依赖的过程。
还有其他解决方案吗?
提前致谢
答案 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和音符等于''(空字符串)