2

我在我的过程中创建了一个表。我有开始日期和结束日期值。我想创建具有此日期范围的列,例如如果开始日期是 2013 年 7 月 15 日,结束日期是 2013 年 7 月 18 日,那么会创建 4 列(july1、july2、july3、july4)。

我怎样才能做到这一点。我用过sql server 2008 ..请帮帮我.....

先生,来自前端的我有 fromdate 和 Todate 字段,然后在提交时我从我的 C# 代码中调用了一个 Sp,现在我想在我的 Proc 中创建一个表。表必须没有。列与没有。在给定日期之间存在天数。

4

2 回答 2

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 的正确表是:SALES (id varchar(36), dt datetime, amount decimal(19,2)) 而不是 SALES (ID VARCHAR(36) , dt1 十进制 (19,2), dt2 十进制 (19,2)... 等等)

因为如果你想改变你的周期,你必须重写你的表,如果你想查询你的表,你必须为每种情况编写几个查询。这张桌子上的工作非常辛苦。

请重新考虑你的选择。

祝你今天过得愉快。

于 2013-07-18T09:38:30.270 回答
0

您可能已经接受了上面的答案,但即使想要这样做也违背了关系数据库背后的原则。我会认真考虑你想要做什么和你的方法。

于 2013-07-18T10:09:31.023 回答