0

オブジェクトを地理データで動作させようとしていSqlDependencyますが、オンラインでそれに関する情報が見つかりません。

クエリ通知システム内で機能する地理関数は何ですか?このようなもののクエリ通知を取得する方法はありますか?

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

Geographyフィールドが事前定義された領域内にあるポイントである新しい行が追加されたときに通知を受け取りたいです。

私が持っている地域は次の形式です。

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

それはジョージア州アトランタです。

4

1 に答える 1

2

制限については、通知用クエリの作成で説明されています。geographyCLR システム タイプ ( 、geometry、 )については言及されていませんhierachyidクエリ通知が舞台裏でどのように機能するかについては以前に説明しました。その記事を読めば、クエリ通知の要件がインデックス付きビューの要件と正確に一致することがわかります (記事では、それが偶然ではない理由を説明しています)。したがって、必要に応じてインデックス付きビューを作成できる場合は、クエリ通知が機能するはずです。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' にインデックスを作成できません。ビューが CLR 型 'Microsoft.SqlServer.Types.SqlGeography' の非決定論的または不正確なメンバー関数 'STGeomFromText' を参照しているためです。関数への参照を削除するか、決定論的な方法で動作するように関数を変更することを検討してください。インデックスの破損につながる可能性があるため、非決定論的に動作する CLR 関数を IsDeterministic=true として宣言しないでください。詳細についてはオンライン ブックを参照してください。

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

于 2012-04-20T19:01:03.513 に答える