2012-02-06 65 views
1

我正在使用SQL Server - 插入到表中時,我在表列id上有一個唯一約束。有插入時,id列中的值爲0。這會導致錯誤。更新插入到SQL Server表中的值

如果id值爲0,是否可以在插入過程中將此id更新爲另一個值?這是爲了防止錯誤並給它一個有效的值。

可能是觸發器?

+0

從數據庫設置該列的默認綁定值並嘗試... – 2012-02-06 11:54:47

+0

如何插入數據? – 2012-02-06 11:55:10

+0

通過sql作業插入的數據 – amateur 2012-02-06 11:59:36

回答

1

觸發器是一種方法,但您可能希望使用filtered index(CREATE UNIQUE INDEX,而不是表約束)來忽略零值。這樣,您不必擔心要放置什麼值

或者,如果您想從另一列填充它,則可以使用具有唯一約束的計算列。

ALTER TABLE whatever 
    ADD ComputedUniqueCol = CASE WHEN Id = 0 THEN OtherCol ELSE Id END 
+0

0不是一個有效的值,所以想插入。 – amateur 2012-02-06 11:58:36

+2

@amateur:什麼是有效的價值呢? – gbn 2012-02-06 11:59:39

0

如果這是您的主鍵,您可以將其指定爲IDENTITY。然後它應該根據種子和增量生成一個自己的值(默認是seed = 1,默認值= 1),所以你不必擔心它。

CREATE TABLE MyTable 
(
    ID int PRIMARY KEY IDENTITY, 
    ... 
) 
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