0

我有一种情况,我有一张下表。

    create table Bulk_Data
    (
    id int identity(1,1),
    UserName varchar(100) not null default 'default value ',
    iPartitionID int null
    )

我在 Bulk_Data 上也有一个插入触发器。

create trigger dbo.Bulk_Data_IU on Bulk_Data 
AFTER INSERT  
AS Begin

    Merge Bulk_Data p1 
    using Bulk_Data p2 on p1.id = p2.id
    when matched then 
        update set p1.iPartitionID = right(p2.id,1);

end

上表中的条件就像我有 3 列不依赖于任何值。1] id 是身份自动递增列 2] UserName 设置为默认值 3] iPartitionID 基于触发器中的插入。

所以我的问题是我应该如何插入记录说假设我不需要在#2 中插入任何值,即在第 2 列中,那么我应该如何在表上触发插入命令。

因为插入命令对我很重要,因为我创建了插入触发器。

当我跑步时

insert Bulk_Data(UserName) values('Suraj Sheikh')

它工作正常,但如果我不想插入任何用户名怎么办。

这可能吗 ?

请帮帮我。

4

2 回答 2

2

您可以使用计算列而不是更新每个插入的所有行的触发器。

create table Bulk_Data
    (
    id int identity(1,1),
    UserName varchar(100) not null default 'default value ',
    iPartitionID as id % 10 persisted
    )
于 2012-05-14T16:37:02.963 回答
1

使用“Instead OF”触发器而不是使用“AFTER INSERT”触发器。

INSTEAD-OF 触发器是 SQL Server 中非常强大的对象。它们允许开发人员转移数据库引擎来执行与用户尝试执行的操作不同的操作。

这样,当对该表触发插入查询时,将不会发生插入,并且触发器中写入的任何语句都将实际应用于 db。

限制 - INSTEAD OF DELETE/UPDATE 触发器不能在具有外键且定义了 DELETE/UPDATE 操作的级联但可以定义插入触发器的表上定义。

于 2012-05-14T14:39:40.520 回答