自动增加SQL列

时间:2014-03-11 16:18:30

标签: sql-server auto-increment

我必须在SQL Server 2008中创建一个新表,并将我的日期列设置为Getdate()的自动增量1天。

第一个条目应使用当前日期插入,第二个条目应使用明天的日期,第三个条目应使用后天的日期,依此类推。

我还想知道是否有任何方法可以使用更新命令手动执行此操作,它将今天的日期放在第1列,明天放在第2列。

3 个答案:

答案 0 :(得分:0)

无论您需要做什么,此功能都可以让您进行日期递增。

http://technet.microsoft.com/en-us/library/ms186819.aspx

将来某天生成日期的示例:

SELECT DATEADD(dd,1,GETDATE());

**

1)如果你需要在每一行插入上生成一个递增的日期,你当然可以使用一个触发器并在那时进行更新。

Similar question with example of using trigger to do a row update

2)如果您需要生成多行数据并填充表格,您可以执行INSERT操作,并按照更新生成日期。对表结构一无所知,也许这样的事情会起作用:

UPDATE T 
SET T.date_col = 
(
  SELECT 
    TOP(1) DATEADD(dd,1,date_col) 
  FROM myTable
  WHERE
    ID = T.ID - 1
)
FROM myTable T
WHERE
  T.date_col IS NULL;

答案 1 :(得分:0)

谢谢大家的努力。我用一个简单的脚本得到了答案。

update  t2 
set     DateColumn = DATEADD(day, rn-1, '1970-01-01')
from    @t2 t2
join    (
        select  ROW_NUMBER() over (order by id) rn
        ,       id
        from    @t2 
        ) t2_numbered
on      t2_numbered.id = t2.id

select * from @t2

答案 2 :(得分:0)

只是说出一个逻辑!

insert into myTbl
select Isnull(max(date_column),getdate()) + 1 from myTbl

对于更新,请尝试此操作,abc是实际表的名称

;with cte as
(
select ROW_NUMBER() over(order by date_col asc) as rno
    ,date_col
 from abc
)
update  cte  set date_col = Dateadd(dd,rno-1,getdate())
 from cte
where cte.date_col is null