Microsoft SQL确保两个表之间的用户Id相同
本文关键字:之间 用户 相同 Id 两个 确保 SQL Microsoft | 更新日期: 2023-09-27 18:11:42
我想把其中一个表中的字段/变量转移到另一个表中。变量是当前用户的用户id。这两个表之间有关系。当用户注册一个帐户时,为他们创建一个UserId。然后,我希望用户能够存储关于他们自己的其他详细信息(存储在另一个表中)。这些项目应该链接到用户。如何将当前用户的UserId附加到他们提交给另一个表的详细信息上?这些是Visual Studio为我制作的自生成SQL命令:
SelectCommand="SELECT [Bhousenum], [Bstreetname], [Bcity], [Bcounty], [Bcountry], [Dhousenum], [Dstreetname], [Dcity], [Dcounty], [Dcountry], [Dpostcode], [Bpostcode], [mobilenum], [credittype], [creditname], [creditnum], [securitycode], [creditexpiry], [dob], [UserId] FROM [Customers] WHERE ([UserId] = @UserId)"
DeleteCommand="DELETE FROM [Customers] WHERE [UserId] = @UserId"
InsertCommand="INSERT INTO [Customers] ([Bhousenum], [Bstreetname], [Bcity], [Bcounty], [Bcountry], [Dhousenum], [Dstreetname], [Dcity], [Dcounty], [Dcountry], [Dpostcode], [Bpostcode], [mobilenum], [credittype], [creditname], [creditnum], [securitycode], [creditexpiry], [dob], [UserId]) VALUES (@Bhousenum, @Bstreetname, @Bcity, @Bcounty, @Bcountry, @Dhousenum, @Dstreetname, @Dcity, @Dcounty, @Dcountry, @Dpostcode, @Bpostcode, @mobilenum, @credittype, @creditname, @creditnum, @securitycode, @creditexpiry, @dob, @UserId) WHERE [UserId] = @UserId"
UpdateCommand="UPDATE [Customers] SET [Bhousenum] = @Bhousenum, [Bstreetname] = @Bstreetname, [Bcity] = @Bcity, [Bcounty] = @Bcounty, [Bcountry] = @Bcountry, [Dhousenum] = @Dhousenum, [Dstreetname] = @Dstreetname, [Dcity] = @Dcity, [Dcounty] = @Dcounty, [Dcountry] = @Dcountry, [Dpostcode] = @Dpostcode, [Bpostcode] = @Bpostcode, [mobilenum] = @mobilenum, [credittype] = @credittype, [creditname] = @creditname, [creditnum] = @creditnum, [securitycode] = @securitycode, [creditexpiry] = @creditexpiry, [dob] = @dob WHERE [UserId] = @UserId">
在设计关联表时使用外键约束,例如:
w3schools.com/sql/sql_foreignkey.asp
我从问题中理解的是,当创建用户时,您想要在进一步的查询中使用ID,如果是这种情况,那么您必须在用户插入查询
中使用以下输出参数 SELECT @NewUserID = SCOPE_IDENTITY() // this commands return newly added id
这一行应该写在查询的末尾。
如果您在代码中使用sqldatasource,那么 <asp:SqlDataSource ...>
<InsertParameters>
........other parameters
<asp:Parameter Direction="Output" Name="NewUserID " Type="Int32" />
</InsertParameters> </asp:SqlDataSource>
如果你想使用存储过程,那么你可以把它写为
ALTE PROCEDURE dbo.Addusers(
.....other parameters
@NewProductID int OUTPUT
)
并将此ID添加到其他表中,您必须在这些表中创建外键。并使用这个ID插入到那些表
外键添加命令
user_id int FOREIGN KEY REFERENCES Userss(user_Id)
如果您需要进一步的信息,请告诉我
对存储过程使用"Output"参数。当您插入详细信息时,将您的用户id发送回前端,然后使用此id执行其他事务。
例如:create proc <procedure name>
(
@name varchar(max),
@OutUserID int output
)
as
begin
insert into <table name> values (<your values>)
set @OutUserID=scope_identity()
end
此SP将为您获取已插入的用户id,但请记住"scope_identity"仅在insert语句之后有效,并且必须打开主键的自动增量。
也可以使用多个输出参数