计算列定义为null

时间:2016-08-22 10:29:56

标签: sql-server

(A.)以下是表格测试中“d_no”列的条件。在这里你可以看到它是一个计算列,它的定义是NULL。所以我想知道这种情况如何生成?我无法创建具有NULL定义的计算列。

  

表名:test
列名:d_no
is_nullable:1   
定义:NULL
is_computed:1

此案例适用于SQL Server 2012(11.0.6523)版本。

(B.)场景: 有“User1”是真正的数据库所有者(自己的数据库)。还有另一个用户“User2”。 User2具有访问User1数据库的一些权限,如SELECT或get DDL。 当我使用User2登录并尝试获取具有列为计算列的表的CREATE查询时。对于该表,我们没有在结果查询中获得计算列定义。 我们得到xyz(numeric(18,0)null)

那么是否可能出现同样的权限问题,在之前的情况(A)中可能会导致null?

2 个答案:

答案 0 :(得分:2)

您无法获得null定义。即使将计算列创建为null,也不会将定义更改为null ..

create table dbo.t4
(
id int null,
idplus as cast(null as int)
)

select definition 
from sys.computed_columns 

输出

(CONVERT([int],NULL,0))

由于权限问题,您看到NULL定义..

以下是关于此事的what MSDN has to say ..

  

查看数据库对象的Transact-SQL源代码的规则比查看元数据更严格。

     

要查看对象的Transact-SQL定义, 用户必须拥有该对象或已被授予该对象的以下权限之一

     

CONTROL
  ALTER
  取得所有权
  查看定义

以下视图的情况也是如此,如果您没有权限,则定义将为null ..

enter image description here

答案 1 :(得分:0)

a)如果用户不是myTable的表所有者,并且仅被授予对表的SELECT权限,则当用户访问以下目录视图时,定义列为NULL。

意味着用户只有选择(datareader)权限而不是dbowner。然后使用该用户登录并检查计算列的定义。

选择定义
来自sys.computed_columns

它在定义字段中为您提供NULL值。

b)如果要在上述同一用户的定义字段中获取计算列的定义,谁只具有SELECT权限,则为特定对象授予VIEW DEFINITION权限(具有计算列的表) 通过用户。

然后再次使用该用户登录并运行查询以查看定义值。那个时候它会在定义字段中显示计算列的实际定义。