我有这个存储过程
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则将其排除?
答案 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