不要更新null输入变量

时间:2013-05-05 06:05:17

标签: sql sql-server

我有这个存储过程

ALTER PROCEDURE dbo.News_Edite
(
  @Id bigint,
  @Title nvarchar(MAX),
  @Lile nvarchar(MAX),
  @Body nvarchar(MAX),
  @Type nvarchar(20),
  @Imgurl nvarchar(MAX),
  @Date nvarchar(50)
)
AS
update tbl_news
set
ne_title=@Title,
ne_lile=@Lile,
ne_body=@Body,
ne_type=@Type,
ne_imgurl=@Imgurl,
ne_date=@Date
where ne_id=@Id
RETURN

但我希望如果@Imgurl为空

则不要更新ne_imgurl

set 子句中包含输入参数的最佳方法是什么,但如果它为null则将其排除?

4 个答案:

答案 0 :(得分:2)

使用函数ISNULL,然后将原始值作为第二个参数传递。 ISNULL做的是它将返回第一个参数,除非第一个参数为null,否则它将返回第二个参数。

ALTER PROCEDURE dbo.News_Edite
(
  @Id bigint,
  @Title nvarchar(MAX),
  @Lile nvarchar(MAX),
  @Body nvarchar(MAX),
  @Type nvarchar(20),
  @Imgurl nvarchar(MAX),
  @Date nvarchar(50)
)
AS
update tbl_news
set
ne_title=@Title,
ne_lile=@Lile,
ne_body=@Body,
ne_type=@Type,
ne_imgurl=ISNULL(@Imgurl, ne_imgurl),
ne_date=@Date
where ne_id=@Id
RETURN

答案 1 :(得分:2)

您可以使用 isNull ,但我不知道您想用

替换它

例如:

ne_imgurl=isNull(@Imgurl, ''),

答案 2 :(得分:1)

使用IF子句

IF( isNull(@Imgurl,0) ==0)
BEGIN
update tbl_news
set
ne_title=@Title,
ne_lile=@Lile,
ne_body=@Body,
ne_type=@Type,
ne_date=@Date
where ne_id=@Id
END

ELSE
BEGIN

update tbl_news
set
ne_title=@Title,
ne_lile=@Lile,
ne_body=@Body,
ne_type=@Type,
ne_imgurl=@Imgurl,
ne_date=@Date
where ne_id=@Id

END

答案 3 :(得分:1)

使用ISNULL或COALESCE功能。

update
    tbl_news
set
    ne_title=@Title,
    ne_lile=@Lile,
    ne_body=@Body,
    ne_type=@Type,
    ne_imgurl=ISNULL(@Imgurl, ne_imgurl),
    ne_date=@Date
where
    ne_id=@Id