CREATE TABLE [dbo].[tblLocations](
[latitude] [float] NOT NULL,
[longitude] [float] NOT NULL,
[location] [varchar](500) NOT NULL,
[timestamp] [datetime] NOT NULL,
[point] [geography] AS geography::Point(latitude, longitude, 4326) NOT NULL
)
在单词AS
上给我错误的语法。
这不是你如何声明计算列吗?
答案 0 :(得分:6)
您不自行声明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))
并且仍然在is_nullable
中显示为sys.computed_columns
,因此它看起来不适用于CLR数据类型(可能因为SQL Server不相信这些是确定性的)。
编辑但是只要计算列标记为NOT NULL
, 在语法上有效指定PERSISTED
,即
[point] AS geography::Point(latitude, longitude, 4326) PERSISTED NOT NULL
在这种特殊情况下,尝试创建具有此类定义的表会产生运行时错误。
表格中的计算列“点” 'foo'不能坚持,因为 列类型,'地理',是一个 非字节顺序的CLR类型。