2016-09-07 98 views
-1
CREATE PROCEDURE Sp_IU_Group(
    GID int, 
    GroupName nvarchar(200), 
    UserID int, 
    Status int 

) 
BEGIN 
IF GID=0 THEN 
    Insert into tblGroup (GroupName,UserID,Status) 
      values (GroupName,UserID,Status); 
else 
     update tblGroup set GroupName=GroupName,UserID=UserID,Status=Status WHERE GID=GID; 
END IF; 
END 
+0

給你的列和你的變量*相同的確切名稱*似乎是一個壞主意。 – David

+0

你能定義「不工作」嗎? - 您是否看到錯誤訊息? –

+0

沒有任何錯誤它已更新所有行。 –

回答

0

這個查詢:

update tblGroup set GroupName=GroupName,UserID=UserID,Status=Status WHERE GID=GID 

將更新表中的每一記錄... 本身。這每一個匹配的記錄,因爲這是總是真:

WHERE GID=GID 

而這個更新的值本身

GroupName=GroupName 

的問題是,你使用相同的名稱對於多個事物。給予不同的名字。事情如此簡單:

CREATE PROCEDURE Sp_IU_Group(
    GIDNew int, 
    GroupNameNew nvarchar(200), 
    UserIDNew int, 
    StatusNew int 
) 

(或使用任何其他標準要從數據庫對象,如具有像@特殊字符前面加上他們區分變量)

然後查詢可以看出其中的差別:(修改相應的存儲過程的其餘部分爲新的變量名,當然)

update tblGroup set GroupName=GroupNameNew,UserID=UserIDNew,Status=StatusNew WHERE GID=GIDNew 

基本上,作爲一般的經驗法則,從不依靠代碼來「知道你的意思」。永遠是明確的,毫不含糊的。

+0

它工作得很好。 –

相關問題