2012-07-31 58 views
0

我有2個表用戶和帳戶。我想要一個觸發器,在創建用戶時自動創建一個帳戶。這裏是我的代碼:在當前表引用的另一個表中創建行的觸發器

alter trigger Add_user on [user] for insert as 
begin 
    insert into [account] (name) values ('Main') 

    declare @newAccountId int, @insertedId int 
    set @newAccountId = (select scope_identity()) 
    set @insertedId = (select id from inserted) 

    update [user] 
    set accountId = @newAccountId 
    where id = @insertedId 
end 

我想有ACCOUNTID用戶表不空但是當我嘗試創建它不會讓我一個新的用戶,我得到一個錯誤抱怨不爲空的AccountID列:(

+1

1.您的賬戶表是什麼樣的? 2.爲什麼你爲這個名字拼寫'Main'? 3.您是否意識到在插入或更新一行或多行時會發生觸發事件?因此,您不能將插入的值存儲在變量中。 – LittleBobbyTables 2012-07-31 01:49:25

+1

'inserted'和'deleted'是表格,以便它們可以表示設置操作的結果。假設它們總是包含一行,設計一個觸發器通常是一個糟糕的計劃。 – HABO 2012-07-31 03:03:23

回答

2

如果您[用戶] .AccountId空的,它應該工作

還要考慮以下幾點:?

  • 沒有[帳戶]表只包含列「名」,即是它全球 適合所有用戶?那麼爲什麼要爲每個用戶創建新帳戶?如果是 特定於用戶,則添加[account]。[userId]列。
  • 我會推薦編寫存儲過程而不是觸發器(首先創建 帳戶記錄然後用戶記錄),它更加明確和安全。對於觸發器,小心 ,其他 開發者可能會爲其插入用戶也創建帳戶感到意外。
相關問題