Sql 使用另一个表中的值自动填充列

Sql 使用另一个表中的值自动填充列,sql,sql-server,ssms,Sql,Sql Server,Ssms,使用SQLManagementStudio,我有两个表,第一个表包含关于每个操作符的信息。包含数据输入的第二个表 第一个表将包含一个用户ID,例如“Ollie”及其相应的小时数,例如8。 当数据输入到第二个表中时,操作员名为“Ollie”,我需要在第二个表中的一个字段自动填充为“8” 下面是第二个表中的表数据,以及我所追求的内容的大致说明 CREATE TABLE [dbo].[tblTime]( [RecordID] [int] IDENTITY(1,1) NOT NULL,

使用SQLManagementStudio,我有两个表,第一个表包含关于每个操作符的信息。包含数据输入的第二个表

第一个表将包含一个
用户ID
,例如“Ollie”及其相应的小时数,例如8。 当数据输入到第二个表中时,操作员名为“Ollie”,我需要在第二个表中的一个字段自动填充为“8”

下面是第二个表中的表数据,以及我所追求的内容的大致说明

CREATE TABLE [dbo].[tblTime](
    [RecordID] [int] IDENTITY(1,1) NOT NULL,
    [Operator] [nvarchar](50) NOT NULL,
    [Timein] [decimal](10, 4) NOT NULL,
    [UserBreak] [decimal](10, 4) NOT NULL,
    [Timeout] [decimal](10, 4) NOT NULL,
    [TotalTime]  AS (([Timeout]-[Timein])-[Userbreak]),
    [OperatorHours] AS (SELECT OperatorHours FROM tblUser t WHERE t.UserID = Operator),

不能对计算列使用子查询。您可以为此编写触发器

CREATE TRIGGER TriggerExample
ON TblTime
BEFORE INSERT, UPDATE
AS 
 Declare @operH int;
 SELECT @operH = OperatorHours FROM tblUser t WHERE t.UserID = inserted.operator;
 inserted.OperatorHours = @operH;
GO

不能对计算列使用子查询。您可以为此编写触发器

CREATE TRIGGER TriggerExample
ON TblTime
BEFORE INSERT, UPDATE
AS 
 Declare @operH int;
 SELECT @operH = OperatorHours FROM tblUser t WHERE t.UserID = inserted.operator;
 inserted.OperatorHours = @operH;
GO

我已经能够修改这个,几乎让它工作,ssms似乎不喜欢“之前”请检查我编辑的答案。在插入之前使用
尝试,更新
尝试了该操作,不幸的是,ssms不喜欢BEFORE语句。它想要在之后,或者因为我已经能够修改它并且几乎使它工作,ssms似乎不喜欢“在”检查我编辑的答案。在插入之前使用
尝试,更新
尝试了该操作,不幸的是,ssms不喜欢BEFORE语句。它需要after,或者for,您可以通过定义一个返回值的函数来实现这一点。但是,不能将子查询包含为计算列。可以通过定义返回值的函数来实现。但是,不能将子查询包含为计算列。