2014-09-05 57 views
0

有没有一种方法可以将列默认为其他列的计算? SSMS给我一个错误(SQL Server 2012)列名称不能用于设置列的默认约束的上下文中。如果这是不被允许的,是否有基于表达式/子句执行(或其他)的解释来解释为什么不允许这样做?这是特定于SQL Server,还是适用于其他DBMS?使用列进行默认约束计算 - SQL Server 2012

对于这个问题,让我们假设将计算值存储在表中而不仅仅是计算ad hoc是有意义的。我意识到这是DB设计中的考虑因素。

明显的解决方法是将计算包括在INSERT子句中,但是这会分隔有关列的信息。在我看来,这将是一个更有效的表格相关质量聚集,以保持在桌子上。

〜布鲁斯

回答

0

在这里你去!

declare @flower_order table(
[flower]  [sysname] 
, [quantity] [int] 
, [price] [money] 
, [tax]  [float] 
, [total_price] as round([quantity] * [price] * (1 + [tax]) 
     , 2)); 
insert into @flower_order 
     ([flower],[quantity],[price],[tax]) 
values  (N'rose',5,8.25,.08), 
     (N'tulip',3,4.74,.0725); 
select [flower] 
    , [quantity] 
    , [price] 
    , [tax] 
    , [total_price] 
from @flower_order; 
+0

谢谢,@凯瑟琳。我执行了这个操作,我看到它是如何工作的,而不是创建一个Default/Binding约束,而是通过就地计算作为declare语句的参数。这并不是我想要的,因为即使我将INSERT的最后SELECT子句用于目标表,表本身仍然没有目标约束本身。 INSERT的其他方法不一定会保持这个约束不变。 感谢您的想法,但。 :) – 2014-09-06 00:47:10