2011-04-05 26 views
2

我在SQL數據庫中獲得了一個包含四列的表:ID,Comp_Id,Cont_Id和Comp_Cont_Id。進入ID,Comp_Id,Cont_Id列的值是手動輸入的,Comp_Cont_Id列中的值將通過串聯ID,Comp_Id,Cont_Id列中的值自動生成。創建一個應通過連接表中其他列中的值自動生成的列

例如,如果我們分別在(ID,Comp_Id,Cont_Id)中輸入(201,301,401),值201_301_401應該在表格的Comp_Cont_Id列中自動生成。

有沒有辦法實現它?如果有,請告訴我。

+1

您使用的數據庫是?例如MS SQL,MySQL。 – richaux 2011-04-05 07:03:15

+0

我正在使用MS SQL數據庫。 – xyzwwq 2011-04-05 07:08:26

回答

4

MS SQL支持計算列,其語法在此similar question中給出。

DROP TABLE test99 
CREATE TABLE test99 (
    id int, 
    comp_id int, 
    cont_id int, 
    comp_cont_id AS cast(id AS varchar) + '_' + cast(comp_id AS varchar) + '_' + cast(cont_id AS varchar) 
) 

INSERT INTO test99 (id, comp_id, cont_id) 
VALUES (201, 301, 401) 

SELECT * FROM test99 
+0

非常感謝您的幫助。 – xyzwwq 2011-04-05 07:38:00

+1

正確的(SQL Server)術語是Computed Columns。 「派生列」通常是一個與select語句相關的短語,用於指出現在結果集中的列不出現在基表中 - 一個類似但不相交的概念 – 2011-04-05 07:44:37

+0

Oh okay! thanx爲您的信息:) – xyzwwq 2011-04-05 07:48:33

3

您使用PHP或ASP.NET來輸入值嗎?如果用戶直接鍵入表格,則可以嘗試使用觸發器設置最後一個值。

但是,Comp_Cont_Id是所謂的派生字段。它的價值取決於其他領域。派生字段的示例包括記錄總數,價格平均值等。最好動態地提出該字段,而不是將其存儲起來。當然,這也有例外,比如性能很重要。

+0

+1這感覺就像是最適合動態生成的那種東西。 – richaux 2011-04-05 07:13:39

+0

是的。但是,爲了達到性能目的,我們的項目不應該使用動態生成。非常感謝你的幫助。 – xyzwwq 2011-04-05 07:25:41

相關問題