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
给我不好的语法。这不是您声明计算列的方式吗?
最佳答案
您自己不会声明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
但是,在这种特定情况下,尝试使用这种定义创建表会产生运行时错误。
关于tsql - 计算列帮助-TSQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5841876/