1

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

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
4

3 回答 3

0

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

你可以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
于 2012-07-31T13:15:28.100 回答
0

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

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

注意:您必须确保您的主键只是 UserId

于 2012-07-31T13:15:49.937 回答
0

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

@Id int OUTPUT,

---
SET @Id = SCOPE_IDENTITY()

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

@Id VARCHAR(15)
Update Profile_Master
set ....
........
where UserId = @Id
于 2012-07-31T13:27:12.727 回答