2012-04-20 4 views
0

Я пытаюсь получить объект SqlDependency для работы с данными географии, но я не нашел никакой информации об этом в Интернете.SqlDependency and 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%')) 

Я хочу получать уведомления при добавлении новой строки, где 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 

Msg 1982, уровень 16, состояние 1, строка 1
Невозможно создать индекс зрения 'test.dbo.vw_test' потому что вид ссылки не- детерминированный или неточная функция-член 'STGeomFromText' по CLR-типу 'Microsoft.SqlServer.Types.SqlGeography'. Рассмотрите возможность удаления ссылки функции или изменения функции, которая будет вести себя детерминированным способом . Не объявляйте функцию CLR, которая ведет себя недетерминистически , чтобы иметь IsDeterministic = true, поскольку это может привести к обрыву индекса . Подробнее см. В разделе «Книги в Интернете».

Там ты ответ: Запрос Уведомления (и все другие производные, такие как SqlDependency) не будет работать с geography::STGeomFromText функции.

+0

Благодарим вас за понимание! Есть ли способ совместной работы с объектами географии и уведомлениями о запросах? –

+0

Я сомневаюсь, что вы можете что-то сделать. –

+0

Возможно, если вы можете выразить условие как нечто, не связанное с «географией» (например, простой сеткой), даже если оно вызывает ложные срабатывания. –