如何在列上添加HIDDEN属性?

时间:2018-03-08 07:46:46

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

创建临时表时,我们需要定义开始和结束日期时间列 可以是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;

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

2 个答案:

答案 0 :(得分:3)

为此你需要使用如下

[ 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

答案 1 :(得分:1)

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

如果停止版本控制并且未隐藏列,则按如下所示添加属性:

ALTER TABLE dbo.Department
    ALTER COLUMN SysStartTime ADD HIDDEN;

ALTER TABLE dbo.Department
    ALTER COLUMN SysEndTime ADD HIDDEN;