你不声明或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将假定列可以为空unless you add an ISNULL()
around the formula。
但是我只是想下面列定义
[point2] AS ISNULL(geography::Point(latitude, longitude, 4326),
geography::STGeomFromText('LINESTRING(-122.360 47.656, -122.343 47.656)', 4326))
,并仍然显示为在sys.computed_columns
is_nullable
所以它看起来并不像一个适用于CLR数据类型(可能是因为SQL Server不相信这些是确定性的)。
编辑:然而是语法有效的,只要计算列标记指定NOT NULL
作为PERSISTED
即
[point] AS geography::Point(latitude, longitude, 4326) PERSISTED NOT NULL
在这种特殊情况下,却试图创建一个表,这样的定义给出了运行时错误。在表 “富”
计算列“点”不能持久,因为 列类型,“地理”,是一个 非字节顺序的CLR类型。
哦好的,所以类型get的计算声明 - 杜老师有道理。除非你进行适当的检查,否则谁说它不能为空。非常有意义。谢谢! – slandau 2011-04-30 12:59:38
实际上对于CLR数据类型,它可能总是假定它是可空的。我只是尝试在'ISNULL'中打包,并且它仍然显示为'sys.computed_columns'中的'is_nullable' – 2011-04-30 13:05:51