2012-07-20 25 views
0

我有兩個表。 dbo.Emp EmpID(PK)|名稱| TypeID(FK)將值傳遞給一個表並在父表中更新

dbo.EmpType TypeID(PK)|只有在dbo.EmpType

自動增加當我的empType更新typeid的價值,它需要獲取存儲在TYPEID dbo.Emp 我用SP這是不工作:鍵入

TYPEID。

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 [email protected]) 
COMMIT 
+0

嘗試使用觸發這個.. 當你在的empType插入數據創建一個觸發器,它也把它插入到表EMP太 – Ram 2012-07-20 08:28:09

+0

你好,我也是SP新手。這是我使用的代碼。 但它沒有儲存在dbo.Emp – Girish 2012-07-20 08:29:23

+0

@Visions您能否迴應?會是一個很大的幫助。 – Girish 2012-07-20 08:37:49

回答

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 
+0

OMG太棒了!一條線就是這樣做的! SET @TYPEID = SCOPE_IDENTITY() 非常感謝Yograj :)謝謝 – Girish 2012-07-20 09:05:57

0

不是100%肯定,爲什麼你會在你的empType表(特別是因爲它是一個自動增量鍵),但是,你可以看看更新FK約束「級聯的更新」來更新TYPEID:

When to use "ON UPDATE CASCADE"

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

+0

對不起 - 沒有讀過你的SP,只是文字。你實際上並沒有更新你的類型ID,而是插入--Gupta先生以前的回答似乎是有道理的。 – Paddy 2012-07-20 08:51:21

+0

是的,因爲Emp表中的TypeID不是自動增量值。 其原因是我有許多其他橋接表需要從其他表的值。 :) – Girish 2012-07-20 09:17:41

相關問題