我需要将本地 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
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是GETDATE()在每个视图、存储过程、计算列、默认值、其他约束等中实际更改此函数。
实施此更改的最佳方法是什么?
我们正处于托管实例的公共预览版中。它仍然有同样的问题GETDATE(),所以它对这个问题没有帮助。迁移到 Azure 是一项要求。这个数据库总是在这个时区使用(并将被使用)。
在问题MS-SQL 上是否有任何(隐藏的)内置函数来取消引用对象名称?作者正在寻求有关是否存在“取消引用”引用字符串的内部函数的建议。作者McNets已经注意到,一些内部函数可以处理引用(例如[MyTable])和未引用(例如)MyTable传递的参数值(例如OBJECT_ID())。
在David Browne - Microsoft给出的答案 ( 1 ) 中,引述如下:
... QUOTENAME 的反面是 PARSENAME,它具有导航多部分名称的附加功能。
我不同意这部分答案的以下评论:
我不同意,你可以修改传递给一个参数
PARSENAME()来显示多部分的部分标识是它的SERVER,DATABASE,SCHEMA或OBJECT部分。但恕我直言,PARSENAME与此相反的说法QUOTENAME有点牵强。
我现在的问题是:
函数PARSENAME()是相反的QUOTENAME()吗?