SQL IF 参数值不等于字段值 UPDATE SET 字段值到参数值

问题描述 投票:0回答:1

我正在 SQL Server Management Studio 中创建一个存储过程,在其中根据用户的 MS ID 在表中搜索特定行。该请求是从 Web 应用程序中的表单发送的,其中用户已更新其信息,并且存储过程会搜索记录以执行更新。

这是我得到的:

BEGIN
    SELECT * 
    FROM [MY_USER_TABLE] 
    WHERE MSID = @MSID

    IF (@FName != FName)
        UPDATE [MY_USER_TABLE]
        SET FName = @FName
    END

    IF (@LName != LName)
        UPDATE [MY_USER_TABLE]
        SET LName = @LName
    END

    IF (@MSID != MSID)
        UPDATE [MY_USER_TABLE]
        SET MSID = @MSID
    END
    -- ...
    -- [several other similar IF statements]
    -- ...
END

我遇到的问题是我在 IF 语句中收到一条错误消息“无效的列名称”:

IF (@FName != FName)

但是,当我将其设置为参数时,列名称似乎很好:

SET FName = @FName

我的查询在与参数进行比较时无法识别列名是否有原因?有没有更好的方法来比较参数值和列字段值,看看它们是否不同并需要更新?

sql sql-server
1个回答
0
投票

MS SQL Server 错误系统非常正确。在

IF (@FName != FName)
中,变量
Fname
未定义。此外,正如评论中所说,多次更新比一次更新更糟糕。系统为每次更新运行单独的事务。你可以做这样的事情。

update my_user_table set
FName = isnull(nullif(FName, @FName),FName),
LName = isnull(nullif(LName, @LName),LName),
MSID = isnull(nullif(MSID, @MSID),MSID)
where MSID = @MSID

或者更简单

update my_user_table set
FName = @FName,
LName = @LName)
where MSID = @MSID
© www.soinside.com 2019 - 2024. All rights reserved.