我有一张桌子,里面有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
答案 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