触发器,在当前表引用的另一个表中创建一行

时间:2012-07-31 00:58:03

标签: sql sql-server sql-server-2008 triggers

我有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

我希望User表中的AccountId不为null但是当我尝试创建一个新用户时,它不会让我和我收到错误抱怨非null的AccountId列:(

1 个答案:

答案 0 :(得分:2)

如果你使[user] .AccountId可以为空,它应该可以工作。

还要考虑以下事项:

  • [account]表只包含“name”列吗?即它是全球性的吗? 对所有用户?那为什么要为每个用户创建新帐户?如果它是 用户特定然后添加[account]。[userId]列。
  • 我建议编写存储过程而不是触发器(首先创建 帐户记录然后用户记录),它更明确和安全。是 小心触发器,这对其他人来说可能是一个惊喜 插入用户的开发人员也会创建帐户。