2016-11-30 8 views
3

私だけでインストールされたSQL Serverの2016 SP1およびこのTSQLスクリプトを実行SQL Server 2016 SP1 - これはバグですか?

CREATE TABLE [dbo].TEST(
[id] [INT] IDENTITY(1,1) NOT NULL, 
[lat] [DECIMAL](9, 6) NULL, 
[lng] [DECIMAL](9, 6) NULL, 
[Location] AS ([geography]::STGeomFromText(((('POINT ('+[lng])+' ')+[lat])+')',(4326))) 
    PERSISTED 
) 

テーブルが罰金作成されます。

私はその後、

Select * from TEST 

(テーブル内のレコードがありません)以下を実行します。これは、

にデータ型varchar型を変換するメッセージ8114、レベル16、状態5、8行 エラーを返します。数値。

それはLocation分野に関連しています。これは、SQL Server 2016のバグ

ですか?私はこの動作が期待できません。次

はあなたが+オペレータが代わりに追加の連結として扱われるので、varchar型にLNGと緯度の値をCASTする必要があるすべての問題

CREATE TABLE [dbo].TEST2(
[id] [INT] IDENTITY(1,1) NOT NULL, 
[lat] [DECIMAL](9, 6) NULL, 
[lng] [DECIMAL](9, 6) NULL, 
[Location] AS [lng] PERSISTED 
) 

select * from TEST2 
+0

また、あなたがこれを行うことはできませんSQL-Serverの2014 –

+0

で同じよ​​うに失敗したので、なぜあなたは計算列としてこれを行うことを期待しますか? '[地理]を選択:: STGeomFromText(((( 'POINT(' 12)+ ' ')93)+')'、(4326))' - あなたはトリガーを使用して値を移入する必要がありますように思えます動的SQLを使用します。 –

答えて

3

が発生することはありません。余分な括弧なし例:

CREATE TABLE [dbo].TEST(
    [id] [INT] IDENTITY(1,1) NOT NULL, 
    [lat] [DECIMAL](9, 6) NULL, 
    [lng] [DECIMAL](9, 6) NULL, 
    [Location] AS [geography]::STGeomFromText('POINT ('+ CAST([lng] AS varchar(10)) + ' ' + CAST([lat] AS varchar(10)) + ')', 4326) 
     PERSISTED 
    ); 
4

変更

[Location] AS ([geography]::STGeomFromText(((('POINT (' + [lng]) + ' ') + [lat]) + ')', (4326))) 

[Location] AS ([geography]::STGeomFromText(((('POINT (' + CAST([lng] AS varchar)) + ' ') + CAST([lat] AS varchar)) + ')', (4326))) 

これら二つの違いにとても似CAST機能の使い方です:

CAST([lng] AS varchar) 
CAST([lat] AS varchar) 

[lng][lat]の問題は、小数点がvarchar文字列に連結されているだけです。テーブルにデータがなくても実際にクエリを実行するまで問題がないのは、selectクエリが実行されるまで[Location]フィールドが形成されていないためです。

必ずしもバグではなく、SQL Management Studioのは、おそらくCREATE TABLEクエリを実行する前にのために解析しなければならない何か。

関連する問題