使用存储过程更新表

时间:2012-07-31 13:11:13

标签: sql sql-server

我有一张桌子,里面有50列。从我的代码开始我首先使用存储过程插入10个值,然后在基于用户ID的第二页中我想要更新其他40列。所以我正在更新表,并且表的userid列是一个自动递增的标识列,以便如何获取更新存储过程的用户标识?

CREATE PROCEDURE sp_update
     (@FormFiledBy varchar(50), @MaritalStatus varchar(50),
      @Height varchar(50), @Religion varchar(50), @Caste varchar(100),
      @MotherTongue varchar(50), @Education varchar(100),
      @Occupation varchar(50), @CountryofResidence varchar(50), 
      @EducationDetails varchar(100), @AnnualIncome varchar(50), 
      @CountryOfBirth varchar(50), @BirthPlace varchar(50), 
      @TimeOfBirth nchar(10), @StarSign varchar(100),
      @Gothram varchar(50), @Rassi varchar(50), @HavinChildren varchar(10),
      @PhysicalStatus varchar (100)
     )
AS
BEGIN      
    UPDATE Profile_Master
    SET FormFiledBy = @FormFiledBy,
        MaritalStatus = @MaritalStatus,
        Height = @Height,
        physicalStatus = @physicalStatus,
        Religion = @Religion,
        Caste = @Caste,
        MotherTongue = @MotherTongue,
        Education = @Education,
        Occupation = @Occupation,
        CountryofResidence = @CountryofResidence,
        EducationDetails = @EducationDetails,
        AnnualIncome = @AnnualIncome,
        CountryOfBirth = @CountryOfBirth,
        BirthPlace = @BirthPlace,
        TimeOfBirth = @TimeOfBirth,
        StarSign = @StarSign,
        Gothram = @Gothram,
        Rassi = @Rassi,
        HavinChildren = @HavinChildren,
        PhysicalStatus = @PhysicalStatus
    WHERE 
        ????
END

3 个答案:

答案 0 :(得分:0)

在初始过程中,当您插入数据时,您应该检索并返回OUTPUT参数中的userid值,以便您可以将其提供给更新过程。

您可以相当轻松地使用SCOPE_IDENTITY()


根据要求,一些示例代码(简化,但您应该看到模式):

CREATE PROCEDURE add_row @data1 varchar(20), @data2 varchar(20), @id int OUTPUT
AS
BEGIN
    INSERT INTO Table (Data1, Data2) VALUES (@data1, @data2)

    SELECT @id = SCOPE_IDENTITY()
END
GO

CREATE PROCEDURE update_row @id int, @data3 varchar(20), @data4 varchar(20)
AS
BEGIN
    UPDATE Table SET Data3 = @data3, Data4 = @data4
    WHERE Id = @id
END
GO

答案 1 :(得分:0)

您不需要更新主键,但必须将UserId作为存储过程的参数传递。

Update Profile_Master
Set ....
Where UserId = @UserId --your parameter

Nota:yuo必须确保您的主键只是UserId

答案 2 :(得分:0)

您只需要从第一个存储过程中传递SCOPE_IDENTITY(),如下所示:

@Id int OUTPUT,

---
SET @Id = SCOPE_IDENTITY()

在第二个存储过程中,将Id作为参数应用Update基于该记录的记录。

@Id VARCHAR(15)
Update Profile_Master
set ....
........
where UserId = @Id