2016-09-07 104 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

它工作得很好。 –