将浮点值更新为null

本文关键字:null 更新 | 更新日期: 2023-09-27 18:25:30

我在MS SQL2008(C#)中有这个存储过程

ALTER PROCEDURE UpdateProducts
@ProductID INT, @Name nvarchar(50), @Length Float
AS
UPDATE       Product
SET          Name = @Name, Length = @Length
WHERE        (ProductID = @ProductID)

长度在某些情况下为"(无)。但当插入"时,会插入值0。我希望该值为null。我该怎么做?这不起作用:

if (Length == "")
{
   Length = null;            
}

将浮点值更新为null

在进程中将默认值设置为NULL,不必显式地将NULL传递给进程。

CREATE PROC ..dbo.Proc ( @param1 int =NULL, @param2 varchar(40) = NULL ,etc)

此外,如果你必须从你的应用程序发送NULL,你会使用DBNull.Value

尝试DBNull.Value:

if (Size == "")
{
   Size = DBNull.Value;
}

并确保数据库列可以为null。

使用NULLIF

UPDATE       Product
SET          Name = @Name, Length = NULLIF(@Length, '')
WHERE        (ProductID = @ProductID)
  • 对于float,空字符串隐式转换为0,int。decimal会给出错误
  • 空字符串和NULL不同

编辑:这处理不干净的输入,所以你不必担心它…