簡體   English   中英

有條件地向 SQL Server 中的現有表添加具有默認值的列

[英]Conditionally add a column with a default value to an existing table in SQL Server

我想根據某些情況/條件在現有 SQL 表中添加一個具有默認值的新列。

我想知道這是否可能。 如果是如何? 如果不是為什么?

選擇 :

一種選擇是創建列然后更新,但這里的方法是不可能的。

讓我們考慮一下我有下表

╔════╦══════════════╗
║ ID ║      Age     ║ 
╠════╬══════════════║
║  1 ║    0.166667  ║   
║  2 ║     0.125    ║   
║  3 ║       13     ║   
║  4 ║       19     ║  
║  5 ║       45     ║  
║  6 ║       59     ║   
║  7 ║       60     ║  
║  8 ║       64     ║ 
╚════╩══════════════╝

所需的輸出是這樣的:

╔════╦══════════════╦═══════════╗
║ ID ║      Age     ║ AgeGroup  ║
╠════╬══════════════╬═══════════╣
║  1 ║    0.166667  ║   NewBorn ║
║  2 ║     0.125    ║   NewBorn ║
║  3 ║       13     ║   Teen    ║
║  4 ║       19     ║   Teen    ║
║  5 ║       45     ║   Adult   ║
║  6 ║       59     ║   Adult   ║
║  7 ║       60     ║  Elder    ║
║  8 ║       64     ║  Elder    ║
╚════╩══════════════╩═══════════╝

我已經研究過這篇文章,但這僅適用於“添加列默認值”

編輯:這是用於想要測試的用戶的上表架構和數據的 SQL腳本

你可以試試這個。 基本上有兩種方法可以實現這一點。

在表架構中添加列

據我了解,您想在表模式中添加一列作為您共享的給定鏈接。 您可以使用case語句為計算值添加列。

編輯:更正語法錯誤

alter table yourtable
    add AgeGroup as (case 
                        when Age < 2 then 'New Born'
                        when Age < 19 then 'Teen'
                        when Age < 45 then 'Young'
                        when Age > 60 then 'Adult'
                        else 'Invalid' 
                     end);

或者

創建視圖

您可以為其創建一個視圖並在任何需要的地方使用它。

Create View TableResult 
As
Select Id, Age, case Age 
                         WHEN Age < 2 then 'New Born'
                         WHEN Age < 19 then 'Teen'
                         WHEN Age < 45 then 'Young'
                         WHEN Age > 60 then 'Adult'
                         else 'Invalid' 
                     end as AgeGroup
End


用例當

        select case when age>0 and age<13 then 'new born'
        when age>=13 and age<=19 then 'teen'
        .................
           ... end -- put here more condition as your need

您可以使用計算字段。

您的桌子設計將是這樣的:

 CREATE TABLE [dbo].[MyTbl](    
 [ID] [INT] IDENTITY(1,1) NOT NULL, 
 [Age] DECIMAL(10,3) NOT NULL,  
 [AgeGroup]  AS (CASE WHEN Age < 1 THEN 'Newborn' 
                      WHEN Age BETWEEN 1 AND 13 THEN 'Kid' 
                      WHEN Age BETWEEN 13 AND 60 THEN 'Adult' 
                      WHEN Age > 60 THEN 'Elder' END)  
 CONSTRAINT [PK_ID]
 PRIMARY KEY CLUSTERED  (   [ID] ASC ))

您的字段將自動填充,您只需添加您的年齡。

首先,您必須為表創建AgeGroup列:

ALTER TABLE yourTable
ADD AgeGroup VARCHAR(10)

至於根據設定條件制作默認值:

UPDATE yourTable
SET AgeGroup = CASE WHEN yourTable.Age >= 0 AND yourTable.Age < 2 THEN 'NewBorn'
WHEN yourTable.Age >= 13 AND yourTable.Age <= 19 THEN 'Teen'
WHEN yourTable.Age >= 20 AND yourTable.Age <= 59 THEN 'Adult'
WHEN yourTable.Age >= 60 THEN 'Elder' END

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM