你没有声明datatype
或者你自己可以为空
CREATE TABLE [dbo].[tblLocations](
[latitude] [float] NOT NULL,
[longitude] [float] NOT NULL,
[location] [varchar](500) NOT NULL,
[timestamp] [datetime] NOT NULL,
[point] AS geography::Point(latitude, longitude, 4326)
)
一般来说,SQL Server 会假设该列可以为空除非你添加一个ISNULL()围绕公式 http://msdn.microsoft.com/en-us/library/ms191250.aspx.
不过我刚刚尝试了以下列定义
[point2] AS ISNULL(geography::Point(latitude, longitude, 4326),
geography::STGeomFromText('LINESTRING(-122.360 47.656, -122.343 47.656)', 4326))
仍然显示为is_nullable
in sys.computed_columns
所以它看起来不适用于 CLR 数据类型(可能是因为 SQL Server 不相信这些是确定性的)。
Edit:然而它is语法上有效指定NOT NULL
只要计算列标记为PERSISTED
i.e.
[point] AS geography::Point(latitude, longitude, 4326) PERSISTED NOT NULL
然而,在这种特殊情况下,尝试创建具有此类定义的表会出现运行时错误。
表中的计算列“点”
'foo' 无法持久化,因为
列类型“地理”是
非字节顺序 CLR 类型。