Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server自动更新列取决于另一列_Sql_Sql Server_Tsql - Fatal编程技术网

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

查看计算列。它们的工作原理与您的
默认值“尚未批准”
相同。您可以使用查询代替硬编码值。审批状态如何更改?是通过您手动执行的另一个更新脚本,还是通过您无法控制的另一个进程?查看计算列。它们的工作原理与您的
默认值“尚未批准”
相同。您可以使用查询代替硬编码值。审批状态如何更改?是通过你手动执行的另一个更新脚本还是通过你无法控制的另一个过程?嘿,马克,是的,我认为你是对的,所以我编辑了我的触发器,现在它做得很好。嘿,马克,是的,我认为你是对的,所以我编辑了我的触发器,现在它做得很好。