如何强制插入语句运行而不在values子句中插入任何记录

时间:2012-05-14 14:33:23

标签: sql-server-2008 sql-server-2005 sql-server-2008-r2

我的情况是我有下表。

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

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

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基于Trigger中的insert。

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

因为我创建了Insert触发器,因此insert命令对我很重要。

我跑的时候

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

它工作正常,但如果我不想插入任何UserName,那该怎么办。

这可能吗?

请帮帮我。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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

通过这种方式,当在该表上触发插入查询时,不会发生插入,并且在触发器中写入的任何语句实际上都将应用于db。

限制 - 无法在具有已定义DELETE / UPDATE操作的级联的外键的表上定义INSTEAD OF DELETE / UPDATE触发器,但可以定义插入触发器。