将float更新为null?

时间:2012-02-21 13:56:42

标签: c# sql-server

我在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;            
}

3 个答案:

答案 0 :(得分:2)

在proc中将默认值设置为NULL,您不必明确地将NULL传递给proc。

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

此外,如果您必须从您的应用发送NULL,您将使用DBNull.Value

答案 1 :(得分:0)

尝试DBNull.Value

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

并确保您的数据库列可以为空。

答案 2 :(得分:0)

使用NULLIF

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

编辑:这涉及不洁的输入,所以你不必担心它......