2011-04-30 8 views
4
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에 잘못된 구문이 표시됩니다.계산 된 열 도움말 - TSQL

계산 된 열을 어떻게 선언합니까?

답변

5

당신은 datatype를 선언하거나 열이 unless you add an ISNULL() around the formula 널 (NULL) 가정합니다 일반적으로 SQL 서버에서 자신에게

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) 
) 

을 Null 허용하지 않습니다.

그러나 난 그냥 다음 열 정의

[point2] AS ISNULL(geography::Point(latitude, longitude, 4326), 
    geography::STGeomFromText('LINESTRING(-122.360 47.656, -122.343 47.656)', 4326)) 

을 시도하고 여전히 그래서 (SQL Server가 이러한 신뢰하지 않는 아마 그 CLR 데이터 유형에 적용처럼 보이지 않는 sys.computed_columns에서 is_nullable로 나타 결정 론적이다.

편집 : 그것을 그러나 이러한 정의에 테이블을 작성하려고 특히이 경우 즉

[point] AS geography::Point(latitude, longitude, 4326) PERSISTED NOT NULL 

PERSISTED만큼 계산 열에 표시된 바와 같이 NOT NULL를 지정 문법적으로 올바른이다 그러나 런타임 오류를 발생시킵니다. 열 유형, '지리'는 비 바이트 정렬 CLR 유형이기 때문에 테이블 '갑'의

계산 열 '점'은 유지할 수 없습니다.

+0

오케이 좋아요. 계산식에 의해 선언 된 get 유형이 의미가 있습니다. 그리고 당신이 적절한 검사를 수행하지 않으면 null이 될 수 없다고 말할 수 있습니다. 완벽하게 이해합니다. 감사! – slandau

+0

사실 CLR 데이터 유형의 경우 항상 Nullable이라고 가정 할 수 있습니다. 방금'ISNULL'에서 줄 바꿈을 시도했지만'sys.computed_columns'에'is_nullable'으로 표시됩니다. –