2011-02-14 70 views

回答

0

使用計算列和標量函數作爲默認值。

+0

標量函數直到插入後纔會有PK的值,所以udf在我的情況下無法幫助填充COLUMN_NUM – gbn 2011-02-14 20:58:43

1

創建計算

CREATE TABLE MyTable (
    COLUMN_PK int NOT NULL identity(1,1) , 
    ... 
    COLUMN_NUM_internal int NULL, 
    COLUMN_NUM AS COALESCE (COLUMN_NUM_internal, COLUMN_PK), 
    ... 
) 

的PK值是未知的,直到INSERT(當然)一個第三塔。但之前沒有,所以你有這樣的事情,或者使用觸發器來更新COLUMN_NUM。但是,上面的這個解決方案也適用於隨後的更新,也沒有額外的代碼(即更新的另一個觸發器)

+0

這種解決方案是不可接受的 – Taras 2011-02-14 20:58:46

0

我會通過觸發器強制執行此操作。

create trigger tr_IU_YourTable on YourTable 
for insert,update 
as 
begin 
    update yt 
     set column_num = yt.column_pk 
     from inserted i 
      inner join YourTable yt 
       on i.column_pk = yt.column_pk 
        and yt.column_num is null 
end 
go 
0

如何讓子表只存儲COLUMN_PK和COLUMN_NUM?只有在指定了COLUMN_NUM值的情況下,該表纔會有記錄。然後,你可以這樣做:

CREATE TABLE Parent (COLUMN_PK int NOT NULL identity(1,1), someCol int NOT NULL) 
CREATE TABLE Child (COLUMN_PK int NOT NULL, COLUMN_NUM int NOT NULL) 

INSERT INTO Parent (someCol) VALUES (1) 
INSERT INTO Parent (someCol) VALUES (2) 
INSERT INTO Parent (someCol) VALUES (3) 
INSERT INTO Parent (someCol) VALUES (4) 
INSERT INTO Parent (someCol) VALUES (5) 
INSERT INTO Child VALUES (1, 10) 
INSERT INTO Child VALUES (3, 30) 
INSERT INTO Child VALUES (5, 50) 

SELECT COLUMN_PK, 
     CASE WHEN EXISTS (SELECT NULL FROM Child WHERE Child.COLUMN_PK = Parent.COLUMN_PK) 
      THEN (SELECT COLUMN_NUM FROM Child WHERE Child.COLUMN_PK = Parent.COLUMN_PK) 
      ELSE COLUMN_PK 
     END 
FROM Parent 
0

使用NHibernate調用存儲過程來插入數據,而不是使用直接插入通過.save方法可以給你更多的控制。

相關問題