【问题标题】:Auto increment SQL column自动递增 SQL 列
【发布时间】:2014-04-15 08:23:43
【问题描述】:

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

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

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

【问题讨论】:

  • 您是说每次将一行插入表中时,日期列都必须根据新行之前最近插入的行中的日期递增?或者您是说您需要为这个新表生成数据并且一次插入多行?
  • 是的,每次向表中插入一行时,日期列应增加 1 天到上一条记录。

标签: sql-server auto-increment


【解决方案1】:

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

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;

【讨论】:

  • 运行第二个查询后,它显示 n 行受影响,但日期列仍然有空值。我的日期列的数据类型是日期时间。
  • 实际上我想要一个查询来更新我为空的日期列,它必须显示记录之间的时间间隔为 1 天。比如第一行 = 2014-03-11,第二行 = 2014-03-12,第三行 = 2014-03-13 .... 我的列数据类型是日期时间。
  • 我的表结构是:create table WordOfDay --( --ID int identity (1,1), --EngTitle varchar(200), --HinTitle nvarchar(400), --EngTitleLink varchar (max), --[Date] 日期时间 --)
  • 我在表的所有列中都有 365 条记录,除了具有空值的日期列。我想从今天的日期开始填充我的日期列,并将 1 天添加到下一行,依此类推。通过运行您的查询,我收到了 365 行受影响的消息,但在运行 select 语句后它再次显示空值。
  • 我猜这是因为您的日期值的 所有 都是 NULL。我以为您的第一个插入将使用 GETDATE()?
【解决方案2】:

我在一个简单的脚本中得到了答案:

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

【讨论】:

    【解决方案3】:

    只要放一个逻辑!

    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
    

    【讨论】:

      猜你喜欢
      • 2017-03-24
      • 2018-01-01
      • 2011-11-21
      • 2012-11-26
      • 2019-02-14
      • 2020-01-15
      • 2016-03-07
      • 2015-07-05
      • 2012-04-10
      相关资源
      最近更新 更多