2014-09-11 82 views
1

我想如果這樣做存儲過程,如果記錄存在則更新

這裏來檢查,如果記錄存在,然後更新它是我目前有:(這顯然是行不通的)

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 

有沒有更好的方式來做到這一點?

回答

3

爲什麼要先檢查?

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:如果該行不存在的更新將更新任何行。

+0

雖然這個工作,我的代碼是錯誤的,所以我會打開一個新的問題。不管怎樣,謝謝你。 – user2279712 2014-09-11 05:57:30

0

如果塊不需要,先選擇是否沒有行,更新塊什麼都不做,也不影響行。

只需在此過程中編寫更新即可。

但也許你想寫的其他如果這個過程,如果沒關係,你可以IF和ELSE。 在IF塊你可以寫這個更新,在ELSE塊你可以做另一個想要的。

+1

爲了幫助改進您的答案的澄清,請提供一些代碼片段。另外請記住,正確應用標點符號和正確的語法將有助於您的讀者更好地理解您的意圖http://stackoverflow.com/help/how-to-answer – 2014-09-11 05:02:31

0
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 
+0

我忘了注意刪除if和else。 – 2014-09-12 00:03:22

相關問題