我的情况是我有下表。
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,那该怎么办。
这可能吗?
请帮帮我。
答案 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触发器,但可以定义插入触发器。