加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 在整个数据库中更改GETDATE()的使用

发布时间:2020-12-12 06:19:54 所属栏目:MsSql教程 来源:网络整理
导读:我需要将本地SQL Server 2017数据库迁移到Azure SQL数据库,我面临一些挑战,因为要经历相当多的限制. 特别是,由于Azure SQL数据库仅在UTC时间(无时区)工作,并且我们需要本地时间,因此我们必须在数据库中的任何位置更改GETDATE()的使用,事实证明这比我预期的更
我需要将本地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().

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

我们在Managed Instances的公开预览中.它仍然与GETDATE()有相同的问题,所以它对这个问题没有帮助.迁移到Azure是一项要求.始终在此时区中使用(并将使用)此数据库.

解决方法

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

在这里您可以参考azure文档:Generating Scripts for SQL Azure

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读