考虑MSDN关于SQL Server 2008 R2存储NUMERIC/DECIMAL精度的内容.
精度1到9是5个字节
精度10到19是9个字节
因此,如果我的业务案例在逻辑上要求具有2个小数位的数据类型和5位数的精度,如果我将其定义为NUMERIC(5,2 )或NUMERIC(9,2 ),则不会产生实际的性能或存储差异.
考虑到我故意忽略的是隐含的检查约束,因为我很可能在限制实际允许范围的列上设置实际检查约束.
在索引,查询性能或系统的任何其他方面,这会有所不同吗?
我正在尝试在SQL Server 2008下创建一个包含GEOMETRY列及其计算变量的表.
考虑下表,计算列返回缓冲几何:
CREATE TABLE [dbo].[Test] (
[Geometry] GEOMETRY NOT NULL,
[Buffer] FLOAT NOT NULL,
[BufferedGeometry] AS ([Geometry].STBuffer([Buffer])) PERSISTED
);
Run Code Online (Sandbox Code Playgroud)
这个问题是导致以下错误:
消息4994,级别16,状态1,行2表'Test'中的计算列'BufferedGeometry'不能保留,因为列类型'geometry'是非字节顺序的CLR类型.
我有搜索BOL和网络,似乎无法找到我的问题的解决方案.我真的希望它能够持久化,以便我可以有效地对其进行索引.我可以在代码中设置它,但随后我有可能出现不一致的数据,因为我在某个时间点需要这两个值.
有人玩这个并知道解决方案或解决方法吗?
更新:Microsoft已在SQL Server 2012中添加此功能.