2015-11-18 27 views
0

我曾與列的SQL Server表:無論如何根據當前年份動態添加SQL Server表中的列?

target_2011, target_2012, target_2013, target_2014, target_2015 

有沒有什麼辦法,只要我們進入2016年添加動態列target_2016表的基礎上,當年?

+2

這是一個糟糕的設計。您不應將值創建爲動態列,您應該創建列來保存動態值。 – Harsh

+4

你可以嗎?我想,您可以創建一年一次的代理作業併發布適當的DDL。我討厭每年有一次工作,因爲這是非常容易被無意中破壞的事情。底層數據模型顯示不正確。使用具有像2014,2015,2016等值的'year_num'列的多行會更有意義。然後,在新的一年到來時,您的數據模型不必更改。 –

+0

不幸的是,它是這樣設計的,當前表中存在大量數據。所以,我沒有打擾它,而是想到了這個想法。 –

回答

3

DECLARE @column varchar(20), @SQL varchar(1000) 
SET @column = 'target_'+CAST(year(getdate()) AS varchar(4)) 
SET @SQL = 
'ALTER TABLE <yourtable> 
ADD '[email protected]+' varchar(50)' 
EXECUTE (@SQL) 

創建一個SQL代理作業現在安排這項工作在00:01每年1月1日運行。

雖然這將做你正在尋找,我同意評論部分的意見。這本身就是一個糟糕的設計,根本不是一個好主意。

+0

它工作!請Upvote !!! –

相關問題