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がnullの場合、ne_imgurlを更新しないでください

入力パラメータをset句に含め、null の場合は除外する最良の方法は何ですか?

4

4 に答える 4

2

関数ISNULLを使用し、元の値を 2 番目のパラメーターとして渡します。ISNULL が行うことは、最初の引数が null でない限り、最初の引数を返すことです。その後、2 番目の引数を返します。

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 に答える