0

私は2つのテーブルを持っています。dbo.Emp EmpID(PK) | 名前 | タイプID(外字)

dbo.EmpType タイプ ID(PK) | タイプ

TypeID: dbo.EmpType のみの AutoIncrement

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

このSPを試してください。これは最初にEmpTypeを挿入し、そこからSCOPE_IDENTITY()挿入されたID値を取得してから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

EmpType テーブルの typeID を更新する理由は 100% わかりませんが (特に自動インクリメント キーであるため)、FK 制約を「更新時にカスケード」に更新することを検討できます。

「ON UPDATE CASCADE」を使用する場合

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

于 2012-07-20T08:46:35.553 に答える