当前位置: 首页 > 面试题库 >

什么是SQL Server中的不精确列?

孟沛
2023-03-14
问题内容

在类型的计算列上创建索引nvarchar会引发以下错误:

无法在表“ MyTable”上创建索引或统计信息“ MyIndex”,因为计算出的列“
MyColumn”不精确且无法持久保存。考虑从索引或统计键中删除列,或将计算的列标记为持久存在。

什么 不精确的 列是什么意思?

更新。定义如下:

alter table dbo.MyTable
    add [MyColumn] as dbo.MyDeterministicClrFunction(MyOtherColumn)
go  
create index MyIndex on dbo.MyTable(MyColumn)
go

UPDATE2。的MyDeterministicClrFunction定义如下:

[SqlFunction(IsDeterministic = true)]
public static SqlString MyDeterministicClrFunction(SqlString input)
{
    return input;
}

问题答案:

根据MSDN,必须持久保留CLR Function列以进行索引:

任何包含公共语言运行时(CLR)表达式的计算列都必须是确定性的,并标记为PERSISTED,然后才能对该列建立索引。计算列定义中允许使用CLR用户定义类型表达式。只要类型是可比较的,就可以为类型为CLR用户定义类型的计算列建立索引。有关更多信息,请参见CLR用户定义类型。

坚持专栏,我怀疑它会起作用。



 类似资料:
  • 问题内容: 为了创建跨平台代码,我想用JavaScript开发一个简单的财务应用程序。所需的计算涉及复利和相对较长的十进制数。我想知道使用JavaScript进行此类数学运算时应避免的错误- 如果有可能的话! 问题答案: 您可能应该将小数点后的值乘以100,并将所有货币值表示为整分。JavaScript中没有十进制数据类型-唯一的数字数据类型是浮点数。因此,通常建议将钱作为美分而不是美元。 考虑一

  • 问题内容: 我正在创建一个小型Java Jpanel游戏,其中应该有一个火箭,它通过箭头上下移动,并通过太空射击。 触发方法应按以下方式工作:按下空格键,东西触发并在屏幕上移动,然后当它碰到某个x时,它就会消失。此外,您只能发射一次,直到另一颗子弹消失为止。 我不知道我在做什么错。首先,在我的代码启动后,您会看到子弹在屏幕上飞舞。 2,子弹没有消失。 第三,即使其他子弹仍然可见,它也允许我再次开火

  • 什么是“精度”?使用float和double时,单和双有什么区别?“单精度32位IEEE 754浮点”“双精度64位IEEE 754浮点”是什么意思?

  • 我理解二进制数的理论,所以双精度数的运算是不精确的。但是,在java中,我不知道为什么“(double)65 / 100”是0.65,这在十进制数上是完全正确的,除了0.6500000000004。

  • IEEE 754浮点数是离散的。 查看此代码在IdeOne上的实时运行。通用域名格式。在JDK8中运行时,输出是 浮点值按预期打印。我预计双倍值0.1d会像1.000000000000000055511151231260一样打印。为什么它在分数部分打印所有零? 如果我把双变量d转换成字符串,它会输出0.1。 java如何将0.1d(大约为1.0000000 149011938476565E-1)的

  • 但似乎每个tensorflow实现(包括这个和官方的tensorflow实现)都使用(指数)移动平均和方差。 请原谅我,但我不明白为什么。是不是因为使用移动平均值对性能更好?还是纯粹为了计算速度? 参考:原稿