2017-08-11 118 views
0

我有下面的表:SQL Server的自動更新列隊伍

CREATE TABLE Projects 
(
     Project_ID int IDENTITY(1,1) PRIMARY KEY, 
     Project_Code varchar(255), 
     Request_Date Date DEFAULT GETDATE(), 
     Region varchar(255), 
     Project_Location varchar(255), 
     Requested_By varchar(255), 
     Project_Responsibility varchar(255), 
     Facility_Classification varchar(255), 
     Project_Type varchar(255), 
     Expected_Start_Date varchar(255), 
     Expected_End_Date varchar(255), 
     Work_Areas varchar(255), 
     Conference_Rooms varchar(255), 
     IDF_MDF varchar(255), 
     Pantries varchar(255), 
     Critical_Infrastructure varchar(255), 
     Building_Support_Areas varchar(255), 
     Data_Centers varchar(255), 
     Other_Areas varchar(255), 
     Project_Manager varchar(255), 
     Project_Owner varchar(255), 
     Project_Sponsor varchar(255), 
     Functional_Currency varchar(255), 
     Approval_Status varchar(255) DEFAULT 'Not yet approved', 
     CIP_NCIP varchar(255), 
     Capital_Expense varchar(255), 
     Fiscal_Year varchar(255), 
) 

我想更新表,這樣當任何記錄變更覈准審批狀態,我想使用區域,位置和ID的組合自動填充項目代碼列。

SQL Server中可以這樣做嗎?如果是這樣如何?

+0

查找到計算列。他們的工作就像你的'DEFAULT'Not yet approved''。您可以使用查詢來代替硬編碼值。 –

+0

審批狀態如何變化?它是通過另一個手動執行的UPDATE腳本還是通過另一個無法控制的進程? – Isaiah3015

回答

4

我建議刪除project_code,並添加計算列:

ALTER TABLE Projects 
ADD project_code AS 
    CASE WHEN Approval_Status = 'Approved' 
     THEN region + '-' + location + '-' + id END 

該計算值在飛行 - 查詢時 - 因此它始終處於最新狀態。否則,你需要一個觸發器來產生相同的效果。

2

作爲一個選項,您可以使用觸發器,這樣如果需要的話,你還可以更新另一個字段:

ALTER TRIGGER UpateValues 
ON Projects 
AFTER INSERT, UPDATE 
AS 
    UPDATE P 
    SET P.Description = (I.region + '-' + I.location + '-' + I.id) 
    FROM 
    Projects P 
    INNER JOIN inserted I ON I.Project_ID = P.Project_ID 

GO 
+2

**嘿,馬克**,是的,我認爲你是對的,所以我**編輯**我的觸發器,現在它做的很好。 –

+1

現在看起來**好多了!做得好 –