猿问

如果给定的值不为空/空,SQL 如何更新数据

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

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

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

我无法将代码复制到此处:“您的帖子似乎包含格式不正确的代码”我尝试了半个小时来更改它,但同样的消息不断出现 - 我上传了一个屏幕截图

它删除了用户数据和它的空。

http://img.mukewang.com/6173c5980001f58010350088.jpg

我尝试了很多方法,更不用说一天一夜一百万了,但都没有成功。

什么是正确的方法?说清楚这与我想要的相反 -

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

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


有只小跳蛙
浏览 216回答 3
3回答

繁花不似锦

如果值被传递为 as NULL,那么您可以简单地执行以下操作:SET AboutMe = COALESCE(@AboutMe, About_me)如果它们可以是NULL或空白,那么您可以使用显式CASE:SET AboutMe = (CASE WHEN @AboutMe IS NULL OR LTRIM(@AboutMe) = '' THEN Aboutme ELSE @AboutMe END)

斯蒂芬大帝

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;

慕斯王

我认为您也想“忽略”,''但问题是这不是NULL.尝试这个:CREATE PROC UpdateMy  @User_name nvarchar(15),  @AboutMe nvarchar(150),  @City nvarchar(21),  @ID intASBEGIN  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;ENDGO
随时随地看视频慕课网APP
我要回答