【问题标题】:How to add HIDDEN property on column?如何在列上添加 HIDDEN 属性?
【发布时间】:2018-08-16 12:00:20
【问题描述】:

创建时态表时,我们需要定义开始和结束日期时间列 可以是hidden - 在SELECT *INSERT without columns 中不可见。我想再添加一列,其中将包含有关提交更改的用户的信息。

问题是,我收到以下错误:

Msg 13735, Level 16, State 1, Line 10
Cannot alter HIDDEN attribute on column 'UserID' in table 'GK' because this column is not a generated always column.

代码如下:

DROP TABLE IF EXISTS GK;

CREATE TABLE GK
(
    [ID] INT
   ,[UserID] BIGINT DEFAULT (CONVERT(BIGINT, SESSION_CONTEXT(N'user_id')))  
)

ALTER TABLE GK
ALTER COLUMN [UserID] ADD HIDDEN;

为什么不允许我在此类列上添加此属性?

【问题讨论】:

  • 如果他们提供开箱即用的临时表就更好了。
  • 对于临时表,我们不能添加除 DateTime 之外的隐藏列类型,因为简单的解决方案是从此表创建视图并排除列 UserID 并使用此视图。

标签: sql-server tsql sql-server-2016 temporal-tables


【解决方案1】:

为此,您需要像下面这样使用

[ GENERATED ALWAYS AS ROW { START | END } [ HIDDEN ] ] 

始终生成为行开始/结束是强制性的。和

另请注意,系统版本表不能有多个“GENERATED ALWAYS AS ROW END”列

另请注意,系统版本表不能有多个“GENERATED ALWAYS AS ROW START”列

因此,如果您已经在使用 2 个日期列,那么这是不可能的。 我认为我们可以使用具有默认值的普通列。

请参阅 Microsoft 的更多信息 - https://docs.microsoft.com/en-us/sql/t-sql/statements/create-table-transact-sql

【讨论】:

    【解决方案2】:

    这里的正确答案是我们只能为临时表日期列添加此属性(当前)。

    如果版本控制已停止且列未隐藏,则按如下方式添加属性:

    ALTER TABLE dbo.Department
        ALTER COLUMN SysStartTime ADD HIDDEN;
    
    ALTER TABLE dbo.Department
        ALTER COLUMN SysEndTime ADD HIDDEN;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-28
      • 2018-07-17
      • 2022-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-26
      • 1970-01-01
      相关资源
      最近更新 更多