2015-07-01 45 views
1

我正在使用MS SQL Server,並且已經創建了多個列和數據庫。一個名爲Inventory的數據庫中的這些列中的3個是:CaseQuantity,UnitsQuantity和TotalUnits。如何更改TotalUnits列變爲(CaseQuanity * 12)+ UnitsQuantity?更改SQL中的列方程

我對此很陌生。非常感謝你的時間,非常感謝。

+0

什麼是'TotalQuantity'?一個新的專欄?它沒有列在你的「3列」列表中。 – Kritner

+0

請爲您的RDBMS選擇一個標籤...不是3:/ – Kritner

+0

您是否試圖在表格上創建一個新列(注意,您稱之爲數據庫,聽起來好像你實際上在談論表格)。你是否希望在select語句中有一個新的列? – Kritner

回答

1

如果你正在嘗試一種新的計算列添加到現有的表,你可以使用ALTER TABLE這樣做:

ALTER TABLE your_table --change this to your tablename 
ADD TotalQuantity AS (CaseQuantity * 12) + UnitsQuantity PERSISTED 

如果你只是想選擇一個新的computed列,你可以這樣做是這樣的:

SELECT CaseQuantity 
    ,UnitsQuantity 
    ,TotalUnits 
    ,(CaseQuantity * 12) + UnitsQuantity AS TotalQuantity 
FROM your_table  --change this to your tablename 

如果您正在尋找重新創建一個新的計算列的表,那麼你可以做這樣的事情:

CREATE TABLE your_table 
(
CaseQuantity int 
,UnitsQuantity int 
,TotalUnits int 
,TotalQuantity AS (CaseQuantity * 12) + UnitsQuantity PERSISTED 
) 

期堅持

您可能已經注意到,我也用「堅持」爲 計算列的屬性。計算列的此屬性在SQL Server 2005及更高版本中引入了 。對於任何 計算列都很重要,因爲許多附加功能都依賴於它。要成爲 能夠將計算列作爲持久性,它必須是確定性的 。

這裏有一些規則:

  • 如果關閉然後再計算永久性屬性欄將只是一個虛擬列。該列中的任何數據都不會存儲在磁盤上,並且每次在腳本中引用時都會計算其值。如果 此屬性設置爲活動,則計算列的數據將爲 存儲在磁盤上。
  • 如果引用列中的任何更新是Persisted,它們將在計算列中自動同步。
  • 除其他一些條件外,還需要Persisted才能在計算列上創建索引。

SQL Fiddle Demo

+0

如果我想將現有的Column TotalUnits更改爲(CaseQuanity * 12)+ UnitsQuantity,該怎麼辦? –

+0

@LeoOsman我會從表中刪除現有的列,並使用上面的alter table語句重新創建TotalUnits列。這裏是查詢放置你的列:'ALTER TABLE your_table DROP COLUMN TotalQuantity;' – FutbolFan