传递价值,以一个表,并在父表更新(Passing value to one table and up

2019-09-19 21:42发布

我有两个表。 dbo.Emp的EmpID(PK)| 名称| typeid的(FK)

dbo.EmpType typeid的(PK)| 类型

TYPEID:自动增加只在dbo.EmpType

当我的empType更新typeid的价值,它需要获取存储在TYPEID dbo.Emp我用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 

Answer 1:

试试这个SP,这将先插入的empType,并从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 


Answer 2:

不是100%肯定,为什么你会在你的empType表(特别是因为它是一个自动增量键),但是,你可以看看更新FK约束“的级联更新”来更新TYPEID:

当使用“ON UPDATE CASCADE”

http://msdn.microsoft.com/en-us/library/aa933119(v=sql.80).aspx



文章来源: Passing value to one table and updating in parent table