2014-09-05 73 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