一尘不染

在整个数据库中更改 GETDATE() 的使用

sql-server

我需要将本地 SQL Server 2017 数据库迁移到 Azure SQL 数据库,我面临着一些挑战,因为有很多限制要通过。

特别是,由于 Azure SQL 数据库仅在 UTC 时间(无时区)中工作并且我们需要本地时间,因此我们必须更改数据库中GETDATE() 任何地方的使用,这已证明比我预期的要多。

我创建了一个用户定义的函数来获取适用于我的时区的本地时间:

CREATE FUNCTION [dbo].[getlocaldate]()
RETURNS datetime
AS
BEGIN
    DECLARE @D datetimeoffset;
    SET @D = CONVERT(datetimeoffset, SYSDATETIMEOFFSET()) AT TIME ZONE 'Pacific SA Standard Time';
    RETURN(CONVERT(datetime,@D));
END

我遇到的问题是GETDATE()在每个视图、存储过程、计算列、默认值、其他约束等中实际更改此函数。

实施此更改的最佳方式是什么?

我们处于托管实例的公共预览版中。它仍然有同样的问题GETDATE(),所以它对这个问题没有帮助。迁移到 Azure 是一项要求。这个数据库总是在这个时区使用(并将被使用)。


阅读 76

收藏
2022-11-11

共1个答案

一尘不染

  1. 使用 SQL Server 工具将数据库对象定义导出到 SQL 文件,其中应包括:表、视图、触发器、SP、函数等
  2. 使用任何允许您查找文本"GETDATE()"并将其替换为的文本编辑器编辑 SQL 文件(首先进行备份)"[dbo].[getlocaldate]()"
  3. 在 Azure SQL 中运行已编辑的 SQL 文件以创建数据库对象…
  4. 执行数据迁移。
2022-11-11