我正在外键中将一个表的标识值存储到另一个表,但是当建立关系时,它会给我错误

本文关键字:另一个 建立 错误 关系 存储 标识 一个 | 更新日期: 2023-09-27 17:55:13

我正在将一个表的标识值存储在外键中的另一个表中,但是在尝试创建关系时,我收到错误 332。

ALTER proc [dbo].[spRegisterUser]
    @Doj date,
    @UserName nvarchar(100),
    @Password nvarchar(10),
    @Reference nvarchar(50),
    @Aadhar nvarchar(50),
    @Email nvarchar(50)
AS
BEGIN
    Declare @count int
    Declare @ReturnCode int
    Select @count = COUNT(UserName)
    from tblUsers where UserName = @UserName
    if @count > 0
    Begin
        Set @ReturnCode = -1
    End
    Else
    Begin   
        Set @ReturnCode = 1 
        insert into tblUsers (DoJ,UserName,Password,Reference,Aadhar,Email) 
        Output inserted.User_ID into tblUserProfiles(UserID)
        values (@DoJ,@UserName,@Password,@Reference,@Aadhar,@Email)
    End
    Select @ReturnCode as ReturnValue
end     

错误是:

输出 INTO 子句的目标表 'tblUserProfiles' 不能位于 (主键、外键) 关系的任一侧。找到引用约束"FK_tblUserProfiles_tblUsers"。

如何克服这个问题?我需要PK FK关系,我还希望FK值自动保存在列中。

请为我找到解决方案。谢谢

我正在外键中将一个表的标识值存储到另一个表,但是当建立关系时,它会给我错误

由于此存储过程实际上只插入行数据,因此可以使用以下代码:

declare @NewUserID INT
insert into tblUsers (DoJ, UserName, Password, Reference, Aadhar, Email) 
values (@DoJ, @UserName, @Password, @Reference, @Aadhar, @Email);
-- get the newly created ID for the new user
SELECT @NewUserID = SCOPE_IDENTITY();
-- insert into the other table
INSERT INTO dbo.tblUserProfiles (UserID)
VALUES (@NewUserID);

这假定tblUsers表中的User_ID列实际上是标识列。

另一种选择是在用户表上使用插入触发器,每当将记录插入用户表时,该触发器都会将记录插入用户配置文件表中。此方法的优点是,即使用户直接插入到表中(我的意思是,不使用存储过程),他们仍将在用户配置文件表中创建一条记录:

CREATE TRIGGER tblUsers_INSERT ON tblUsers 
FOR INSERT
AS
BEGIN
    INSERT INTO tblUserProfiles(UserId)
    SELECT User_ID 
    FROM Inserted
END
相关文章: