【问题标题】:Migrating Datetime to DateTimeOffset将 Datetime 迁移到 DateTimeOffset
【发布时间】:2013-06-10 09:28:47
【问题描述】:

现在是我正在开发的应用程序中将 SQL Server 中的 DateTime 字段迁移到 DateTimeOffset 的时候了。

想知道 SQL Server 中是否有任何自动化工具可以帮助我解决这个问题,因此我不需要编写一堆 alter table 语句的脚本?

【问题讨论】:

    标签: sql sql-server-2008 datetime datetimeoffset


    【解决方案1】:

    SQL Server 本身没有这样的工具,但是有 3rd 方工具可以完成数据库的管理任务并为您生成更改脚本。

    在没有第三方工具的情况下,您可以编写一个脚本,为您生成更改脚本。

    这是一个示例脚本,它查找datatime 类型的所有列并生成脚本以将其更改为DateTimeOffset 数据类型。

    select 
    OBJECT_NAME (a.object_id) as Table_Name
    ,a.name as Colimn_Name
    ,b.name as Old_Datatype
    ,'ALTER TABLE ' + OBJECT_NAME (a.object_id) + ' ALTER COLUMN ' + a.name + ' DATETIMEOFFSET '   + 
    CASE a.is_nullable
        when 1 then ' NULL '
        else ' NOT NULL '
    END
    from sys.columns  a
    join sys.types b on a.user_type_id = b.user_type_id
    join sys.tables c on a.object_id = c.object_id
    where b.name = 'datetime'
    and c.type = 'U'
    

    您还可以使用未记录的sp_msForEachTable 为数据库中的每个表执行代码。

    【讨论】:

      【解决方案2】:

      我有类似的问题。

      这是我更新列的操作。我按照我在网上找到的一个示例将 DateTime 列转换为 DateTimeOffset。

      例如,对于 NorthWind 数据库,您可以执行以下操作。首先执行创建转换函数

      CREATE FUNCTION fn_DSTOffset( @date1 DATETIMEOFFSET )
      RETURNS INT
      AS
      BEGIN
      RETURN
      CASE WHEN ( ( @date1 > '2009-3-29 2:00' AND @date1 <= '2009-10-25 2:00' )
          OR ( @date1 > '2010-3-28 2:00' AND @date1 <= '2010-10-31 2:00' )
          OR ( @date1 > '2011-3-27 2:00' AND @date1 <= '2011-10-30 2:00' ) )
          THEN 60 -- offset in minutes
          ELSE 0
          END
      END
      GO
      

      尝试使用此函数更改列 - 下面的示例显示如何为 Bi 执行此操作

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-25
        • 1970-01-01
        • 2013-08-15
        • 1970-01-01
        • 2015-03-13
        • 2021-09-02
        • 2012-12-05
        • 2018-11-10
        相关资源
        最近更新 更多