我正在外键中将一个表的标识值存储到另一个表,但是当建立关系时,它会给我错误
本文关键字:另一个 建立 错误 关系 存储 标识 一个 | 更新日期: 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