C# 将值传递给一个表并在父表中更新

C# 将值传递给一个表并在父表中更新,c#,sql-server-2008,stored-procedures,C#,Sql Server 2008,Stored Procedures,我有两张桌子。 dbo.Emp EmpIDPK |名称|类型IDPK dbo.EmpType 类型IDPK |类型 TypeID:仅在dbo.EmpType中自动递增 当我在Emptype中更新TypeID的值时,它需要存储在dbo.Emp的TypeID中 我使用的SP不工作 Create Procedure bridge_Type( @EmpID INT, @Name varchar(50), @Mob2 numeric(10,0), @Email varchar(50), @Typ

我有两张桌子。 dbo.Emp EmpIDPK |名称|类型IDPK

dbo.EmpType 类型IDPK |类型

TypeID:仅在dbo.EmpType中自动递增

当我在Emptype中更新TypeID的值时,它需要存储在dbo.Emp的TypeID中 我使用的SP不工作

Create Procedure bridge_Type(
@EmpID INT,
@Name   varchar(50),
@Mob2   numeric(10,0),
@Email  varchar(50),
@Type   varchar(50)
)
AS 
DECLARE @TYPEID int
Set NOCOUNT OFF

BEGIN TRANSACTION
Insert into dbo.Emp VALUES (@EmpID, @Name, @Mob2, @Email, @TYPEID)
IF @@ERROR <> 0
BEGIN 
ROLLBACK
RETURN
END

INSERT INTO dbo.EmpType VALUES (@Type)
IF @@ERROR <> 0 
BEGIN     
ROLLBACK     
RETURN 
END  

declare @id int
SET @id= @TYPEID;
Update Dbo.Emp 
Set @TYPEID= (Select TypeID from dbo.EmpType
          WHERE  TypeID=@typeID)
COMMIT 

尝试此SP,这将首先插入空类型,并从SCOPE_IDENTITY中获取插入的标识值,然后插入emp

Create Procedure bridge_Type(
@EmpID INT,
@Name   varchar(50),
@Mob2   numeric(10,0),
@Email  varchar(50),
@Type   varchar(50)
)
AS 
DECLARE @TYPEID int
Set NOCOUNT OFF

BEGIN TRANSACTION

INSERT INTO dbo.EmpType VALUES (@Type)

SET @TYPEID = SCOPE_IDENTITY()

IF @@ERROR <> 0 
BEGIN     
ROLLBACK     
RETURN 
END 


Insert into dbo.Emp VALUES (@EmpID, @Name, @Mob2, @Email, @TYPEID)
IF @@ERROR <> 0
BEGIN 
ROLLBACK
RETURN
END

COMMIT 

无法100%确定为什么要更新EmpType表中的typeID,特别是因为它是一个自动增量键,但是,您可以考虑将FK约束更新为“更新时级联”:


尝试对此使用触发器。。当您在emptype中插入数据时,创建一个触发器,该触发器也会将数据插入表emp tooHello,我也是SP的新手。这是我使用的代码。但它并没有存储在dbo中。Emp@Visions你能回答一下吗?这将是一个很大的帮助。阅读此抱歉-没有阅读您的SP,只是文本。实际上,您并没有更新您的类型ID,而是插入—古普塔先生之前的回答似乎有道理。是的,因为Emp表中的类型ID不是自动递增值。原因是我有许多其他桥接表需要其他表中的值:天哪,太棒了!一句话就成功了!!SET@TYPEID=SCOPE\u身份非常感谢Yograj:谢谢