2013-07-18 51 views
2

我在My procedure中創建了一個表。 我有開始日期和結束日期值。我想創建具有此日期範圍的列,如開始日期爲2013年7月15日,結束日期爲2013年7月18日,則創建4列(july1,july2,july3,july4)。動態創建表中的列

我該如何做到這一點。我已經使用SQL Server 2008 .. 請幫我.....

先生從前端我有fromdate和Todate字段然後提交我已經從我的C#代碼調用了Sp,現在我想創建一個我的Proc中的表。表格必須沒有。列沒有。的天數在給定日期之間存在。

+0

請重新表達您的問題。根據我的理解,你有兩列表示一個日期範圍,並且根據這兩個日期之間的天數,你希望將這些列添加到表中或者在另一個表中創建? (這可能是完全錯誤的,但這是從你的問題中明白的) –

+0

你在SP中試過了什麼?首先顯示努力。 – Romesh

+0

從前端先生我有fromdate和Todate字段然後提交我已經從我的C#代碼調用了Sp,現在我想在我的Proc中創建一個表。表格必須沒有。列沒有。的天數在給定日期之間存在。 – social

回答

2

試試這個:

DECLARE @dtmin date 
DECLARE @dtmax date 
DECLARE @dynsql nvarchar(3000) 
DECLARE @colname varchar(20) 
SET @dynsql = N'CREATE TABLE trial(' 
SET @dtmin = {d '2013-07-15'} 
SET @dtmax = {d '2013-07-18'} 
DECLARE @currdate date 
SET @currdate = @dtmin 

WHILE (@currdate <= @dtmax) 
BEGIN 
    SET @colname = DATENAME(month, @currdate) + CONVERT(varchar, DATEPART(day, @currdate)) 

    SET @dynsql = @dynsql + @colname + ' varchar(10)' 

    IF (@currdate < @dtmax) 
    BEGIN 
     SET @dynsql = @dynsql + ', ' 
    END 
    ELSE 
    BEGIN 
     SET @dynsql = @dynsql + ')' 
    END 

    SET @currdate = DATEADD(day, 1, @currdate) 
END 

EXEC sp_executesql @dynsql 

PS:我不知道你的請求的原因,但一般不以這種方式正確創建表,因爲你想要的信息投入列,應放在行中。

例子: 如果我想在白天儲存的銷售一天,正確的表,我命名爲銷售,是: SALES(ID VARCHAR(36),DT日期時間,金額小數(19,2)) 代替 銷售(ID VARCHAR(36),dt1十進制(19,2),dt2十進制(19,2)...等等)

因爲如果你想改變你的期限,你必須重寫你的表,如果你想要查詢你的表,你必須爲每種情況寫幾個查詢。這張桌子上的工作非常辛苦。

請重新考慮你的選擇。

祝您有愉快的一天。

0

您可能已經接受了上面的答案,但即使想要這樣做也可以很好地對待關係數據庫背後的原理。我會認真考慮你想要做什麼和你的方法。

+0

你是對的,但我們不知道這個請求的原因。這是非常艱苦的工作,但我集中我的答案實施解決方案。 –

+0

是的,我知道,我確信OP會讚賞你的回答,但我認爲他們知道他們可能朝着錯誤的方向前進也很重要。 – LoztInSpace

+0

嗨,我已經將我的答案與關於正確創建表的一個小例子結合起來。我希望我們的朋友重新考慮他的選擇。祝你今天愉快。 –