2012-04-20 11 views
0

SqlDependencyオブジェクトを地理データで使用するようにしようとしましたが、オンラインに関する情報が見つかりませんでした。SqlDependencyとGeography SQL Server

クエリ通知システムではどのような地理関数が機能しますか?このようなクエリ通知を受け取る方法はありますか?

SELECT Id 
    FROM dbo.Items 
    WHERE 
    (geography::STGeomFromText(<Insert Geo Coords here>, 4326).STIntersects(Geography) = 1 
      AND (FullText like '%Pepsi%' OR FullText like '%Coke%')) 

IはGeographyフィールドが事前定義された領域の内部に位置している点である場合、新しい行が追加されたときに通知します。

私が持っている領域はの形式は以下のとおりであることはジョージア州アトランタになり

'POLYGON ((-84.54674 33.647809, -84.54674 33.887618, -84.289389 33.887618, -84.289389 33.647809, -84.54674 33.647809))' 

答えて

2

制限はCreating a Query for Notificationで説明されています。 CLRシステムタイプ(geographygeometryhierachyid)の記述はありません。私はの前に説明しました。この記事を読むと、クエリ通知の要件がインデックス付きのビューの要件と正確に一致することがわかります(そして、その記事は偶然ではない理由を説明しています)。したがって、望むようにインデックス付きのビューを作成できる場合は、クエリ通知が機能するはずです。 MSDNの例を使用して、試すことができます:

CREATE TABLE SpatialTable 
    (id int IDENTITY (1,1), 
    GeogCol1 geography, 
    GeogCol2 AS GeogCol1.STAsText()); 
GO 

INSERT INTO SpatialTable (GeogCol1) 
VALUES (geography::STGeomFromText('LINESTRING(-122.360 47.656, -122.343 47.656)', 4326)); 

INSERT INTO SpatialTable (GeogCol1) 
VALUES (geography::STGeomFromText('POLYGON((-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))', 4326)); 
GO 

create view vw_test 
with schemabinding 
as 
select id, GeogCol1, GeogCol2 
from dbo.SpatialTable 
where geography::STGeomFromText('POINT(-122.35 47.656)',4326).STIntersects(GeogCol1) = 1; 
go 

create unique clustered index cdx_vw on vw_test (id) 
go 

メッセージ1982、レベル16、状態1、行1
は、ビュー にインデックスを作成できません 'test.dbo.vw_test' ビューが参照するため、非または 不正確なメンバ関数 'STGeomFromText''Microsoft.SqlServer.Types.SqlGeography'のCLRタイプの。関数への参照 を削除するか、確定的な方法で動作するように関数を変更することを検討してください。 インデックス が破損する可能性があるため、非確定的に動作するCLR関数を宣言しないでください。 にはIsDeterministic = trueが設定されています。詳細については、Books Onlineを参照してください。

回答あり:クエリ通知(およびSqlDependencyのような他のすべての派生物)は、geography::STGeomFromText関数では機能しません。

+0

あなたの洞察をいただきありがとうございます!地理オブジェクトとクエリ通知を一緒に使用する方法はありますか? –

+0

あなたができることは何か疑問です。 –

+0

おそらく、偽陽性を引き起こしたとしても、条件を「geography」(単純なグリッドシステムのようなもの)を含まないものとして表現できるのであれば。 –

関連する問題