我有一个用户表 并且我希望用户更新其一些详细信息(数据),但是如果用户决定不插入值并将其发送为空,我希望数据保留相同的值。
如果我插入,这对我根本不起作用-
exec UpdateAboutMe '','','',21 To this proc:
我无法将代码复制到此处:“您的帖子似乎包含未正确设置为代码格式的代码”,我尝试了半个小时才能更改它,并且不断出现相同的消息-我上传了一个截图
它清除了用户数据并将其清空。
我尝试了很多方法,而不是一天一晚 却没有成功。
什么是正确的方法? 明确地说,这与我想要的相反-
SET @AboutMe= IsNull(@AboutMe, [About_me])
因此,如果@AboutMe发送为空,则[About_me]将不会被清除/擦除。 谢谢。
答案 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