1

我有这个存储过程

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子句中包含输入参数但如果它为空则将其排除的最佳方法是什么?

4

4 回答 4

2

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

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
于 2013-05-05T06:08:26.453 回答
2

您可以使用isNull但我不知道您想用什么替换它

例如 :

ne_imgurl=isNull(@Imgurl, ''),
于 2013-05-05T06:09:49.290 回答
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
于 2013-05-05T07:46:53.800 回答
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
于 2013-05-05T06:11:50.310 回答