在SQL中添加计算列
如何添加计算选定列总和的计算列 这就是我所做的,但有一个错误在SQL中添加计算列,sql,sql-server,Sql,Sql Server,如何添加计算选定列总和的计算列 这就是我所做的,但有一个错误 ALTER TABLE dbo.tblEM_Reimbursement ADD [Amount] AS (SELECT SUM(Total) FROM dbo.tblEM_ReimbursementEntry WHERE ReimbursementID = ReimbursementID) 上面说 味精1046,第15级,状态1,第2行 在此上下文中不允许子查询。只允许使用标量表达式 提前感谢您可以使用用户定义的功能未经测试代码如下
ALTER TABLE dbo.tblEM_Reimbursement
ADD [Amount] AS (SELECT SUM(Total) FROM dbo.tblEM_ReimbursementEntry WHERE ReimbursementID = ReimbursementID)
上面说
味精1046,第15级,状态1,第2行在此上下文中不允许子查询。只允许使用标量表达式
提前感谢您可以使用用户定义的功能未经测试代码如下
CREATE FUNCTION dbo.Get_ReimbursementEntry (@ReimbursementID int)
RETURNS DECIMAL(10,2)
AS BEGIN
RETURN (SELECT SUM(Total) FROM dbo.tblEM_ReimbursementEntry WHERE ReimbursementID = ReimbursementID)
END
GO
ALTER TABLE dbo.tblEM_Reimbursement
ADD [Amount] AS (dbo.Get_ReimbursementEntry (ReimbursementID))
GO
但是要注意性能影响您可以使用
触发器
Trigger
是一个用调用的PL/SQL编写的自动函数
在特定事件之后或之前
阅读以便更好地理解
用于SQL Server的读和写操作
示例:
CREATE TABLE Employee_Test
(
Emp_ID INT Identity,
Emp_name Varchar(100),
Emp_Sal Decimal (10,2)
)
INSERT INTO Employee_Test VALUES ('Anees',1000);
INSERT INTO Employee_Test VALUES ('Rick',1200);
INSERT INTO Employee_Test VALUES ('John',1100);
INSERT INTO Employee_Test VALUES ('Stephen',1300);
INSERT INTO Employee_Test VALUES ('Maria',1400);
假设您有另一张桌子:
CREATE TABLE Employee_Test_Audit
(
Emp_ID int,
Emp_name varchar(100),
Emp_Sal decimal (10,2),
Audit_Action varchar(100),
Audit_Timestamp datetime
)
此触发器在表上插入后触发。让我们将触发器创建为:
CREATE TRIGGER trgAfterInsert ON [dbo].[Employee_Test]
FOR INSERT
AS
declare @empid int;
declare @empname varchar(100);
declare @empsal decimal(10,2);
declare @audit_action varchar(100);
select @empid=i.Emp_ID from inserted i;
select @empname=i.Emp_Name from inserted i;
select @empsal=i.Emp_Sal from inserted i;
set @audit_action='Inserted Record -- After Insert Trigger.';
insert into Employee_Test_Audit
(Emp_ID,Emp_Name,Emp_Sal,Audit_Action,Audit_Timestamp)
values(@empid,@empname,@empsal,@audit_action,getdate());
PRINT 'AFTER INSERT trigger fired.'
GO
嗯,这个错误信息对我来说似乎是清楚易懂的。不允许您访问计算列中其他表中的数据。(甚至同一表格中的其他行)不。。所以我需要使用函数。。我经常遇到计算列中函数的问题,因为我以后无法修改它。就我个人而言,在这种情况下,我会看看视图(可能已索引)是否满足要求。Damien是对的:视图中的联接会更好,因为计算列可以访问和使用同一行中的其他列,例如,
ALTER TABLE dbo.Invoice ADD GrandTotal AS Total+Tax+Freight
但它无法引用表中的其他行我已经尝试过这个方法,但是如果我以后修改这个函数,我总是会遇到问题。两个表中的每个表上至少有一个触发器,而不是一个UDF或(更好)一个联接/视图,这是不可取的。