【问题标题】:Stored procedure if record exists then update如果记录存在则存储过程然后更新
【发布时间】:2014-09-11 04:38:20
【问题描述】:

我正在尝试检查记录是否存在,如果存在则更新它

这是我目前拥有的:(这显然不起作用)

    CREATE PROCEDURE dbo.update_customer_m
       @customer_id             INT                      , 
       @firstname               VARCHAR(30)          , 
       @surname                 VARCHAR(30)              , 
       @gender                  VARCHAR(6)               , 
       @age                     INT                  , 
       @address_1               VARCHAR(50)      , 
       @address_2               VARCHAR(50)              ,
       @city            VARCHAR(50)              ,
       @phone           VARCHAR(10)              ,
       @mobile          VARCHAR(11)              ,
       @email           VARCHAR(30)              ,               
AS 
    IF EXISTS 
    (
       SELECT *
       FROM dbo.Customer
       WHERE CustID = @customer_id
    )
BEGIN 
       UPDATE dbo.Customer
           SET Firstname = @firstname,  Surname = @surname, Age = @age, Gender = @gender, Address1 = @address_1, Address2 = @address_2, City = @city, Phone = @phone, Mobile = @mobile, Email = @email
       WHERE CustID = @customer_id
END 

有没有更好的方法可以做到这一点?

【问题讨论】:

    标签: sql asp.net sql-server stored-procedures


    【解决方案1】:

    为什么两个都先检查?如果行不存在,则更新不会更新任何行:

       UPDATE dbo.Customer
           SET Firstname = @firstname,  Surname = @surname, Age = @age, Gender = @gender,
               Address1 = @address_1, Address2 = @address_2, City = @city,
               Phone = @phone, Mobile = @mobile, Email = @email
           WHERE CustID = @customer_id;
    

    if 不需要。

    【讨论】:

    • 虽然这可行,但我的代码是错误的,所以我将提出一个新问题。还是谢谢你。
    【解决方案2】:

    如果不需要块,先选择如果没有行,更新块什么都不做,不影响行。

    只需在此过程中编写您的更新。

    但也许你想为这个过程写 else if,如果没问题,你可以你 IF 和 ELSE。 在 IF 块你可以写这个更新,在 ELSE 块你可以做另一个想要的。

    【讨论】:

    • 为了帮助您更好地阐明您的答案,请提供一些代码 sn-p。另外请记住,正确使用标点符号和正确的语法将帮助您的读者更好地理解您的意图stackoverflow.com/help/how-to-answer
    【解决方案3】:
    SELECT *
       FROM dbo.Customer
       WHERE CustID = @customer_id
    //add this
    IF @@ROWCOUNT>=1
    BEGIN 
       UPDATE dbo.Customer
           SET Firstname = @firstname,  Surname = @surname, Age = @age, Gender = @gender, Address1 = @address_1, Address2 = @address_2, City = @city, Phone = @phone, Mobile = @mobile, Email = @email
       WHERE CustID = @customer_id
    END 
    

    【讨论】:

    • 我忘了注意删除 if 和 else。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-02
    • 2016-01-13
    相关资源
    最近更新 更多