2017-06-04 35 views
0

主要是,抱歉太過於描述。 我通過創建一個自定義ID字段「PatientID」來存儲患者的信息在sql db中,並且我有一個主鍵字段「ID」。 PatientID有一個模式「PID-1」或「PID-2」等等。我想同步兩個ID。如果表格的「John」的ID是4,那麼其patientID也應該是「PID-4」。爲此,我做了一些編碼,比如沒有記錄,然後從「PID-1」開始保存patientID,然後爲所有下一個記錄首先從ID字段中找到患者的最大ID,並將其增加1並將其與「PID 「+(tableID + 1)。如何同步自定義ID列與表的主鍵列

ID PatientID 
1  PID-1 
2  PID-2 
3  PID-3 
4  PID-4 

現在,對於一個實例,在添加更多記錄時,雖然記錄未保存,但ID增加,但引發異常。問題來了。假設有一些錯誤,ID 5的記錄無法保存在數據庫中,在程序正確運行時修復了這個錯誤後,它將ID 6而不是5.並且對於patientID,由於MAX查詢,它將放入「PID-5」 。從這裏開始,兩個ID都不同。刪除同樣的問題,如果我刪除上表中的最後一條記錄,即4和PID-4,則下一個記錄的ID將是5,而PatientID將是「PID-4」。這是處理我身邊兩個ID的整個問題圖片。任何替代解決方案或任何修改我的想法或任何更好的主意,那麼我將高度讚賞。

+1

很抱歉,如果這聽起來太關鍵了,但是這個「PatientId」有什麼意義?爲什麼你想要一個額外的冗餘代理ID,只有一個效率較低的存儲爲字符的附加無用的前綴? – SqlZim

+0

@SidraM:顯示4或PID-4只是字符串格式化的問題。我不會存儲這兩個值[使用兩列]。 –

+0

@SqlZim ..那是因爲每個病人都有自己的ID來檢查記錄。就像在學校的學生分配輥編號等 – SidraM

回答

2

在SQL Server中,你可以爲這個目的創建一個計算列:

ALTER TABLE Patient DROP COLUMN PatientID; 
GO 
ALTER TABLE Patient ADD COLUMN PatientID AS ('PID-'+CAST(ID AS VARCHAR(15)); 

有關計算列的詳細信息,請看看here

注意:我認爲你的表名是Patient。如果這不是你的表的名字,你必須相應地改變它。

+0

如果我添加一個像您一樣的計算列,它會對我的C#代碼產生什麼影響。那麼我不必檢查最大值? – SidraM

+0

其實你只會在select語句中讀取這個值。您無需爲此專欄做任何其他事情。每次在表上運行select語句時,如果您沒有選擇保留計算列,則會計算該值。如果我沒有記錯的話,有兩種計算列是持久化的,以及那些在數據庫引擎執行select語句時即時計算的。 – Christos

+0

因此,要回答你的問題,你必須刪除任何與此列相關的東西,除了相應的屬性(我想你有一個類代表一個Patient記錄,在這個類中你有一個名爲PatientID的屬性,我指的是這個屬性。 ) – Christos