Microsoft SQL确保两个表中的用户ID相同

时间:2013-05-01 10:34:12

标签: c# asp.net tsql

我想让我的一个表中的字段/变量转移到另一个表。变量是当前用户的用户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">

3 个答案:

答案 0 :(得分:1)

在设计关联表时使用外键约束,例如参见:

w3schools.com/sql/sql_foreignkey.asp

答案 1 :(得分:1)

我从问题中理解的是,如果是这种情况,您希望在创建用户时在您的其他查询中使用该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) 

如果你需要任何进一步的信息,请告诉我

答案 2 :(得分:0)

在存储过程中使用“输出”参数。当您插入详细信息时,请将您的用户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语句之后有效且主键的自动增量必须打开。

您还可以使用多个输出参数。