【发布时间】:2016-11-06 17:31:52
【问题描述】:
我将一个表的标识值存储到外键中的另一个表中,但是在尝试创建关系时,出现错误 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
错误是:
OUTPUT INTO 子句的目标表“tblUserProfiles”不能位于(主键、外键)关系的任一侧。找到引用约束“FK_tblUserProfiles_tblUsers”。
如何克服这个问题?我需要 PK FK 关系,我还希望 FK 值自动保存在列中。
请为我找到解决方案。谢谢
【问题讨论】:
-
一些代码怎么样?你如何创建你的数据库?没有这些信息,就不可能找出错误。
-
您正在插入一条记录。没有理由完全使用输出子句。只需使用一个变量来保存@@SCOPE_IDENTITY 就可以了
-
@cha 。 . .这真的是非常非常糟糕的建议。从
insert返回 id 的正确方法是 OP 使用OUTPUT的方式。 -
@rahul 。 . .我建议先将值放入表变量中,然后将数据从那里加载到最终表中。
-
@GordonLinoff 为什么在这种情况下使用
scope_identity()是一个糟糕的建议?我理解插入多条记录时需要输出子句,但插入单条记录时为什么不使用scope_identity()?
标签: c# sql asp.net .net sql-server-2008