SQL Server自动更新列取决于另一列
我有一个包含以下列的表:SQL Server自动更新列取决于另一列,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个包含以下列的表: 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
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中是否可以这样做?如果是这样,怎么做?我建议删除
project\u code
并添加一个计算列:
ALTER TABLE Projects
ADD project_code AS
CASE WHEN Approval_Status = 'Approved'
THEN region + '-' + location + '-' + id END
这会在查询时动态计算值,因此它总是最新的。否则,您将需要一个触发器来产生相同的效果。我建议删除
project\u code
并添加一个计算列:
ALTER TABLE Projects
ADD project_code AS
CASE WHEN Approval_Status = 'Approved'
THEN region + '-' + location + '-' + id END
这会在查询时动态计算值,因此它总是最新的。否则,您将需要一个触发器来实现相同的效果。作为一个选项,您可以使用触发器,这样您还可以在需要时更新另一个字段:
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
作为一个选项,您可以使用触发器,这样您还可以在需要时更新另一个字段:
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
查看计算列。它们的工作原理与您的
默认值“尚未批准”
相同。您可以使用查询代替硬编码值。审批状态如何更改?是通过您手动执行的另一个更新脚本,还是通过您无法控制的另一个进程?查看计算列。它们的工作原理与您的默认值“尚未批准”
相同。您可以使用查询代替硬编码值。审批状态如何更改?是通过你手动执行的另一个更新脚本还是通过你无法控制的另一个过程?嘿,马克,是的,我认为你是对的,所以我编辑了我的触发器,现在它做得很好。嘿,马克,是的,我认为你是对的,所以我编辑了我的触发器,现在它做得很好。