使用今天的日期动态添加列

时间:2016-09-19 15:03:15

标签: sql-server stored-procedures dynamic-columns

我正在尝试创建一个存储过程,该过程将每天动态添加具有今天日期的列。这样做的原因是因为每天我都会收到一个新文件,其中包含每个项目的新计数。他们希望白天保持历史总数。这是我认为我能做到这一点的唯一方法,除非你们其中一个人对这种模式设计有建议。谢谢。

1 个答案:

答案 0 :(得分:1)

以下是您的查询:

IF EXISTS (select * from dbo.sysobjects where id = object_id(N'[usp_AddCollumByDate]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE usp_AddCollumByDate
GO

create procedure usp_AddCollumByDate
as
begin
    declare @sql varchar(max);
    declare @toDay varchar(20)=CONVERT(varchar(10),GETDATE(),112);
    set @sql = 'ALTER TABLE MyTable ADD  D' +  @toDay + ' varchar(max); '
    print @sql
    EXECUTE(@sql);
end

exec usp_AddCollumByDate

它会每天添加一列(今天为其添加的例子):

ALTER TABLE MyTable ADD  D20160920 varchar(max); 

现在仔细聆听:

  1. 我在今天的日期前添加了一封信D。这是因为 20160920INVALID列名称。你必须开始一个专栏 带字母(例如An3,a33 ......)
  2. 我使用了112样式,其日期为yyyymmdd,你 不能使用1111110和其他一些风格,因为它会给出日期 使用- mm-dd-yyyyINVALID列名称。-。您 无法在列名中使用yyyymmddHere is more style,请尝试 使用yymmdd,{{1}} style