0

我的理解是,不可能设置一个时态表,其中基表具有基于 UDF 的计算列。但是,我看到它建议如果您遵循特定过程,这应该是可能的: Azure SQL Server 2016 临时表中的计算列

建议的步骤是

  • 首先关闭系统版本控制
  • 然后将您的计算列添加到基表中
  • 验证结果计算列的“类型”
  • 将具有适当静态类型的列添加到历史记录表
  • 重新打开系统版本控制

此解决方案可能仅适用于 Azure。我已经使用 SQL Standard 进行了尝试,使用的表具有日期时间类型的 UDF 计算列,但没有成功。有没有人能够让它工作,如果可以,请分享一个简单的 TSQL 示例。

肿瘤坏死因子

4

1 回答 1

0

这是可行的,但 UDF 必须是模式绑定。

有一个例子:

CREATE FUNCTION [dbo].[VitalyUTCtoDate] (@UTCDate DATETIME2)
RETURNS DATETIME2 WITH SCHEMABINDING AS  
BEGIN 
    RETURN CASE WHEN @UTCDate < '9999-01-01' THEN DATEADD(HOUR, DATEDIFF(HOUR, GETUTCDATE(), GETDATE()), @UTCDate) ELSE NULL END;
END
GO

CREATE TABLE [dbo].[VitalyTest](
     [ID] [bigint] IDENTITY(1,1) NOT NULL 
    ,[Name] NVARCHAR(255) NOT NULL
    ,[Value] INT NULL
    ,[ValidFrom] DATETIME2 (2) GENERATED ALWAYS AS ROW START HIDDEN 
    ,[ValidTo] DATETIME2 (2) GENERATED ALWAYS AS ROW END HIDDEN

    ,[WhenCreated] AS dbo.VitalyUTCtoDate(ValidFrom)

    ,CONSTRAINT [PK_VitalyTest] PRIMARY KEY CLUSTERED ([ID] ASC)
        WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ,PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
)
WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = [dbo].[VitalyTestHistory]))
GO
于 2018-03-15T02:07:54.887 回答