是时候在我正在开发的应用程序中将 SQL Server 中的 DateTime 字段迁移到 DateTimeOffset 了。
想知道 SQL Server 中是否有任何自动化工具可以帮助我解决这个问题,所以我不需要编写一堆 alter table 语句的脚本?
是时候在我正在开发的应用程序中将 SQL Server 中的 DateTime 字段迁移到 DateTimeOffset 了。
想知道 SQL Server 中是否有任何自动化工具可以帮助我解决这个问题,所以我不需要编写一堆 alter table 语句的脚本?
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
的代码为数据库中的每个表执行代码。
我有类似的问题。
这是我为更新列所做的。我按照我在网上找到的一个示例将 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 执行此操作