插入表180次,每日递增

时间:2013-09-14 19:39:39

标签: sql sql-server

我正在尝试插入一些记录,接下来180天每个记录一个(每个记录除日期外都是相同的)。我不是100%最好的方法,但我尝试了以下几点:

insert into [table]
select 12, DateAdd(d, row_number() - 1, GETDATE()), 0, NULL, NULL, NULL, 2
where row_number() < 180

这当然抱怨我没有使用OVER,但我不知道它是如何适合这种情况的。也许我在更高层次上错误地思考这个问题。

有关最佳方法的任何想法吗?

有问题的SQL Server类型是MSSQL。

2 个答案:

答案 0 :(得分:4)

假设您有SQL Server并且愿意在下面的CTE中输入开始日期和结束日期:

with dateranger as
(
    -- put start date here or use getdate()
    select cast('2013-01-01' as datetime) as date_of_interest
    union all
    select dateadd(day, 1, date_of_interest)
    from dateranger
    where dateadd(day, 1, date_of_interest) <= '2013-02-28'
    -- put end date above or use dateadd(d, 180, getdate())
)
insert into your_table
    select 12, date_of_interest, 0, null, null, null, 2 from dateranger

这将使用CTE创建一个日期范围表,并在表格中插入相关日期。

答案 1 :(得分:3)

Numbers table!

INSERT INTO your_table (list, of, fields, ..., date_field )
SELECT list
     , of
     , fields
     , ...
     , DateAdd(dd, number, Current_Timetstamp)
FROM   dbo.numbers
WHERE  number BETWEEN 1 AND 180

假设你不是没有时间部分的日期(即yyyy-mm-dd 00:00:00.000

SELECT DateAdd(dd, DateDiff(dd, 0, Current_Timestamp), 0) As date_with_time_truncated

只需将第一个查询中的Current_Timestamp与上面的内容交换!