如何在MSSQL中创建可以更新的虚拟列或类似列,仅反映另一个字段中的值



我正在编写一个连接到遗留后端系统的web应用程序。后端由客户端控制,它们在SQL Server或Oracle中。列中的名称有时存在细微的差异,这会导致JPA映射问题。我想在两个数据库中为每个表创建一个视图,使所有名称相同,这仍然是一个选项。然而,我也在看虚拟或计算列,这似乎完美地解决了这个问题。只需添加一个具有我想要的名称的虚拟列,它反映了我所拥有的列的名称。然后我的JPA指向两个数据库中的名称,我可以忽略另一个。

一些信息似乎说我可以创建可以更新的计算列,另一些似乎说他们不能。如果它们可以更新,谁能告诉我该怎么做?如果他们不能,有没有人有一个建议,我如何可以掩盖这些数据库的差异,或者它是回到为我创建视图?

我尝试在SQL Server中创建一个虚拟列,它允许我的代码在两种不同的模式下运行(并且比创建视图要少得多),但是虚拟列不能更新,在Oracle客户可以做什么和SQL Server客户可以做什么方面产生了很大的差异。

声明计算列就像定义如何计算它们一样简单。考虑:

DECLARE @Table TABLE (Quantity INT, Price DECIMAL(10,2), Total AS Price*Quantity)
INSERT INTO @Table (Quantity, Price) VALUES
(10,2),(15,4)

这里我们创建了一个表,并将计算列Total定义为价格乘以数量。

SELECT *
FROM @Table 
Quantity    Price   Total
-------------------------
10          2.00    20.00
15          4.00    60.00

如果我们想更新total的值,因为它与Price和Quantity有明确的关系,我们可以更新这些列来间接影响total的值:

UPDATE @Table
SET Price = Price/2
SELECT *
FROM @Table
Quantity    Price   Total
-------------------------
10          1.00    10.00
15          2.00    30.00

您不会直接更新新的计算列,因为它们只显示您提供的定义的结果。如果您想更改该定义,则需要修改表并修改该定义,但这将导致整个列被修改,而不仅仅是单个行。

最新更新