【问题标题】:Dynamically add column with today's date使用今天的日期动态添加列
【发布时间】:2016-09-19 15:03:15
【问题描述】:

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

【问题讨论】:

  • insert into table values (col1, col2, getdate()) ?需要您提供更多详细信息。
  • 为什么不每天添加一行,将日期作为一列,将总计作为另一列?
  • 你可以用一个规范化的表和一个数据透视查询来做到这一点
  • 好的,我的架构目前是这样的: CVEId PK INT Not Null, 09-19-2016 INT Not Null 如何让它在下一个日期添加另一列?还是运行总计和日期列是最好的方法?我试图通过 CVEId 进行关联,而不必一遍又一遍地重复相同的 CVEId。

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


【解决方案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,你 不能使用11,111,10 和其他一些样式,因为它给出了日期 -mm-dd-yyyy 一样,它是一个 INVALID 列名。你 不能在列名中使用-Here is more style,尝试 使用yyyymmdd,yymmdd风格

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-30
    • 2020-11-08
    • 2018-09-27
    • 2019-07-10
    • 2020-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多