[英]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.