SQL如果给定的值不为null / empty

时间:2018-07-22 23:21:12

标签: c# sql sql-server sql-update isnull

我有一个用户表 并且我希望用户更新其一些详细信息(数据),但是如果用户决定不插入值并将其发送为空,我希望数据保留相同的值。

如果我插入,这对我根本不起作用-

exec UpdateAboutMe '','','',21  To this proc:

this is the proc

我无法将代码复制到此处:“您的帖子似乎包含未正确设置为代码格式的代码”,我尝试了半个小时才能更改它,并且不断出现相同的消息-我上传了一个截图

它清除了用户数据并将其清空。

row affected

我尝试了很多方法,而不是一天一晚 却没有成功。

什么是正确的方法? 明确地说,这与我想要的相反-

    SET @AboutMe= IsNull(@AboutMe, [About_me])

因此,如果@AboutMe发送为空,则[About_me]将不会被清除/擦除。 谢谢。

3 个答案:

答案 0 :(得分:1)

如果这些值以NULL的形式传递,则您只需执行以下操作:

SET AboutMe = COALESCE(@AboutMe, About_me)

如果它们可以为NULL或空白,则可以使用显式的CASE

SET AboutMe = (CASE WHEN @AboutMe IS NULL OR LTRIM(@AboutMe) = '' THEN Aboutme ELSE @AboutMe END)

答案 1 :(得分:0)

如果变量CASE或空字符串或只是空格,则可以使用IS NULL来用自身替换值。否则,请使用变量的值。这是可能的,例如通过结合使用ltrim()isnull()和对空字符串的比较。

UPDATE [Users_Table]
       SET [User_name] = CASE
                           WHEN ltrim(isnull(@User_name, '')) = '' THEN
                             [User_name]
                           ELSE
                             @User_name
                         END,
           [About_me] = CASE
                          WHEN ltrim(isnull(@AboutMe, '')) = '' THEN
                            [About_me]
                          ELSE
                            @AboutMe
                        END,
           [City] = CASE
                      WHEN ltrim(isnull(@City, '')) = '' THEN
                        [City]
                      ELSE
                        @City
                    END
       WHERE [UserID] = @ID;

答案 2 :(得分:0)

我认为您也想“忽略” '',但问题是这不是NULL

尝试一下:

CREATE PROC UpdateMy
  @User_name nvarchar(15),
  @AboutMe nvarchar(150),
  @City nvarchar(21),
  @ID int
AS
BEGIN
  UPDATE Users_Table
  SET
    [User_name] = CASE WHEN ISNULL(@User_name, N'') = N'' THEN [User_name] ELSE @User_name END,
    [About_me] = CASE WHEN ISNULL(@AboutMe, N'') = N'' THEN [About_me] ELSE @AboutMe END,
    [City] = CASE WHEN ISNULL(@City, N'') = N'' THEN [City] ELSE @City END
  WHERE [UserID] = @ID;

  SELECT * FROM Users_Table WHERE [UserID] = @ID;
END
GO