1

テーブルがあり、50 列あります。私のコードビハインドから、最初はストアドプロシージャを使用して10個の値を挿入しています。その後、ユーザーIDに基づいて2番目のページで他の40個の列を更新したいと考えています。テーブルを更新していますが、テーブルのユーザー ID 列は自動インクリメントされる ID 列なので、更新ストアド プロシージャのユーザー 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

SCOPE_IDENTITY()以下のように、最初のストアド プロシージャから渡す必要があります。

@Id int OUTPUT,

---
SET @Id = SCOPE_IDENTITY()

そして、2 番目のストアド プロシージャではId、引数として、Updateそれに基づくレコードを適用します。

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

最初の手順では、データを挿入するときに、ユーザー ID の値を取得して OUTPUT パラメーターで返し、それを更新手順に提供できるようにする必要があります。

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 に答える