我有两张桌子。 dbo.Emp EmpID(PK)|名称| TypeID(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
答案 0 :(得分: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
答案 1 :(得分:0)
不是100%确定为什么要更新EmpType表中的typeID(特别是因为它是自动增量键),但是,您可以将FK约束更新为“更新级联”:
When to use "ON UPDATE CASCADE"
http://msdn.microsoft.com/en-us/library/aa933119(v=sql.80).aspx