无论数据是否提供,我是否可以创建一个在插入时填充列的禁区?
问题描述:
这是一个奇怪的要求。无论数据是否提供,我是否可以创建一个在插入时填充列的禁区?
数据库(SQL)上有一列可以为空。 我有一个限制,填充列是空/默认提供,它从一个序列填充。
是否可以设置一个约束来忽略由insert语句提供的任何数据并始终放入下一个序列值?
我目前的表/约束是:
CREATE TABLE [dbo].[testmembership](
[id] [int] NOT NULL,
[name] [nvarchar](50) NOT NULL,
[membershipno] [nvarchar](50) NULL
) ON [PRIMARY]
alter table testmembership
add constraint DF_mytblid
default
'PREFIX-'+cast((next value for membershipseq) as nvarchar(50))
for membershipno
如果我做到以下几点:
insert into testmembership (id,name,membershipno) values (12,'test',default)
它yeilds正确的顺序产生的价值。 不过,我希望它仍然具有即使我把这个序列值:
insert into testmembership (id,name,membershipno) values (12,'test','ignoreme')
答
我不认为你可以做你想要使用的约束什么,而是你可以定义一个触发器,它取代使用的代替选项正常插入行为:
像这样的东西可能会奏效:
create trigger tr on testmembership instead of insert as
insert testmembership (id, name, membershipno)
select id, name, 'PREFIX-' + cast((next value for membershipseq) as nvarchar(50))
from inserted;
你使用MySQL或MS SQL Server?不要标记不涉及的产品。 – jarlh
您可以使用触发器。 – jarlh
不是100%肯定的,但你可以使用计算列这个 –