2017-08-11 128 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

现在看起来**好多了!做得好 –