2015-02-05 42 views
0

我在更新觸發器後創建,它從子項創建父項。T-SQL - 子項 - 父項

所以更新後,如果帳戶不存在聯繫人,觸發器將創建帳戶名爲「firstname + lastname + Household」。對於連接,我使用額外的帳戶在我存儲contact_ID的列。插入後,我在聯繫表上運行更新,在此處我將創建的賬戶ID放入適當的列。有沒有辦法避免使用額外的列?我如何獲得account_id?

BEGIN 
if not exists (select * from Account as A 
        join inserted as I on a.account_ID=i.account_fk where a.deleted=0) 
begin 

insert into account 
(
Auto_Create_ID 
,Name 
) 
select 
    i.contact_ID  AS OLD_ID**strong text** 
    ,isnull(i.firstname,'') + ' ' + i.lastname + ' Household' AS Name 
from inserted AS I 
where isnull(i.lastname,'')<>'' 


update C 
set C.Account_FK=a.Account_ID 
from Contact AS C 
join Account AS A on C.Contact_ID=a.Auto_Create_ID 
where a.Deleted=0 and c.Contact_ID in 
(select Contact_ID from inserted) 


end 

立即謝謝

+0

所以你想創建後帳戶的ID,然後將其鏈接到聯繫人? – Jens 2015-02-05 16:24:40

+0

你想在'UPDATE'之後或者在'INSERT'後面做這個嗎? 「UPDATE」是否可以留在應該刪除的'account'中的舊行? – HABO 2015-02-05 17:51:29

+0

您可以在'INSERT'語句中使用['OUTPUT'子句](https://msdn.microsoft.com/en-us/library/ms177564.aspx)來檢索任何或全部列,例如, 'Auto_Create_ID'和任何其他需要將分配的id與'inserted'中的數據關聯起來的列。 – HABO 2015-02-05 19:18:48

回答

0

如果您使用的是IDENTITYAuto_Create_ID,那麼你的INSERT語句後,您可以使用SCOPE_IDENTITY()獲得新插入的行的關鍵。

相關問題