0

我有两张桌子。dbo.Emp EmpID(PK) | 姓名 | 类型ID(FK)

dbo.EmpType TypeID(PK) | 类型

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 
4

2 回答 2

1

Try This SP,这将首先插入 EmpType,并从中SCOPE_IDENTITY()获取 Inserted Identity Value,然后插入 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 
于 2012-07-20T08:38:39.080 回答
0

不是 100% 确定为什么要更新 EmpType 表中的 typeID(特别是因为它是自动增量键),但是,您可以查看将 FK 约束更新为“更新时级联”:

何时使用“ON UPDATE CASCADE”

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

于 2012-07-20T08:46:35.553 回答