我正在使用SQL Server - 在插入表时,我对表列id
有一个唯一的约束。插入时,进入id
列的值可能为0
。这将导致错误。
如果id
值为0,是否可以在插入期间将此id
更新为其他值?这是为了防止错误并为其提供有效值。
可能是一个触发器?
答案 0 :(得分:1)
触发器是单向的,但您可能希望使用filtered index(CREATE UNIQUE INDEX,而不是表约束)来忽略零值。这样,你不必担心放在那里的价值
或者,如果要从其他列填充它,则可以使用具有唯一约束的计算列。
ALTER TABLE whatever
ADD ComputedUniqueCol = CASE WHEN Id = 0 THEN OtherCol ELSE Id END
答案 1 :(得分:0)
如果这是您的主键,您可以将其指定为IDENTITY。然后它应该根据种子和增量为自己生成一个值(默认是seed = 1和default = 1),所以你不必担心它。
CREATE TABLE MyTable
(
ID int PRIMARY KEY IDENTITY,
...
)
答案 2 :(得分:0)
创建“代替”触发器并检查ID上的值。
CREATE trigger checkID
on YOUR_TABLE
instead of insert
as
begin
declare @id int
select @id=id from inserted
if (@id==0) begin
--DO YOUR LOGIC HERE AND THEN INSERT
end else begin
insert into DESTINATION_TABLE (VALUES)
SELECT VALUES FROM INSERTED
end
end