2012-04-20 103 views
0

我試圖讓SqlDependency對象使用地理數據,但我還沒有找到任何有關它的信息在線。SqlDependency和地理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%')) 

我想,當一個新的行添加其中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系統類型(geography,geometry,hierachyid)。我之前已經描述過how Query Notifications works behind the scenes,如果您閱讀了該文章,您將看到查詢通知的要求與索引視圖的要求完全匹配(文章解釋了爲什麼這不是巧合)。所以如果你可以像你想要的那樣創建一個索引視圖,Query Notification應該可以工作。讓我們試着使用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' CLR類型 'Microsoft.SqlServer.Types.SqlGeography'。考慮刪除參考 到功能或改變功能的行爲在確定性 方式。請勿聲明行爲不確定的CLR函數 以使IsDeterministic = true,因爲這會導致索引 損壞。詳情請參閱聯機叢書。

這是你的答案:查詢通知(和所有其他衍生物,如SqlDependency)將不會與geography::STGeomFromText函數一起使用。

+0

謝謝你的洞察!有沒有辦法一起處理地理對象和查詢通知? – 2012-04-20 19:19:56

+0

我懷疑你有什麼可以做的。 – 2012-04-20 20:19:20

+0

也許如果你可以將條件表達爲不涉及「地理」(如簡單網格系統)的東西,即使它觸發誤報。 – 2012-04-20 21:27:16