MS SQL Computed列

时间:2015-06-18 13:59:19

标签: sql sql-server sql-server-2008

我想在另一个表上基于COUNT(*)创建一个列,当从该表中删除一个记录时,它应该减少这个新列中的值,反之亦然。所以,这是查询:

  

SELECT COUNT(*)FROM dbo.Korisnik1_FakturaStavka GROUP BY dbo.Korisnik1_FakturaStavka.FakturaID

它返回:enter image description here

当我尝试创建这样的计算列时:

  

CREATE TABLE test(       NumberOF as(SELECT COUNT(*)FROM dbo.Korisnik1_FakturaStavka GROUP BY dbo.Korisnik1_FakturaStavka.FakturaID))

我收到以下错误:

Subqueries are not allowed in this context. Only scalar expressions are allowed.

以下是我想要计算的主表:

enter image description here

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

可以定义UDF:

create function dbo.NumberOfFakturaID(@id int) returns int as begin
  return (select count(1) from Korisnik1_FakturaStavka where id=@id)
end

然后将其用作计算列:

CREATE TABLE test(FakturaID int, NumberOF as dbo.NumberOfFakturaID(FakturaID))

但是应该谨慎使用那种计算列。

答案 1 :(得分:0)

评论太长了。

您可以通过定义一个函数来计算计数并在计算列定义中使用该函数来完成此操作。但是,我不认为这对于经常使用的列是一个好主意,因为你将在幕后进行大量计算"。

备选方案:

  • 使用附加计数列设置视图或物化视图。
  • 在您需要时明确计算。
  • 设置触发器,以便在第二个表中插入/更新/删除行时,将计数存储在第一个表中。