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

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

4

1 回答 1

2

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

还要考虑以下事项:

  • [account] 表是否仅包含列“名称”?即它对所有用户都是全球性的吗?那为什么要为每个用户创建新帐户呢?如果它是特定于用户的,则添加 [account].[userId] 列。
  • 我建议编写存储过程而不是触发器(首先创建帐户记录然后用户记录),它更明确和安全。小心触发器,插入用户也创建帐户可能会让其他开发人员感到惊讶。
于 2012-07-31T01:52:23.457 回答