在SQL Server中插入表中时更新值

时间:2012-02-06 11:51:49

标签: sql sql-server sql-server-2008 triggers

我正在使用SQL Server - 在插入表时,我对表列id有一个唯一的约束。插入时,进入id列的值可能为0。这将导致错误。

如果id值为0,是否可以在插入期间将此id更新为其他值?这是为了防止错误并为其提供有效值。

可能是一个触发器?

3 个答案:

答案 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