2008-10-23 9 views
10

Estoy tratando de crear una tabla en SQL Server 2008 que contenga una columna GEOMETRY y una variación calculada de la misma.Cómo persistir una columna GEOMETRÍA o GEOGRAFÍA calculada

Teniendo en cuenta la siguiente tabla, donde la columna calculada devuelve una geometría tamponada:

CREATE TABLE [dbo].[Test] (
    [Geometry]  GEOMETRY NOT NULL, 
    [Buffer]  FLOAT  NOT NULL, 
    [BufferedGeometry] AS ([Geometry].STBuffer([Buffer])) PERSISTED 
); 

El problema con esto es que da como resultado el siguiente error:

Msg 4994, Level 16, State 1, Line 2 Computed column 'BufferedGeometry' in table 'Test' cannot be persisted because the column type, 'geometry', is a non-byte-ordered CLR type.

Tengo buscar BOL y la Web y parece que no puede encontrar una solución a mi problema. Realmente me gustaría que persista para que pueda indexar de manera efectiva. Podría establecerlo en código, pero luego tengo la posibilidad de datos inconsistentes ya que necesito ambos valores en algún momento.

¿Alguien jugó con esto y conoce una solución o solución alternativa?

Actualización: Microsoft ha añadido esta funcionalidad en SQL Server 2012.

+0

Vote por este artículo Connect: http://connect.microsoft.com/SQLServer/feedback/details/378126/how-to-persist-a-geometry-or-geography -column –

Respuesta

4

Creo que se puede utilizar un disparador para calcular y almacenarlo en el campo [BufferedGeometry]

+0

Personalmente, no me gusta usar disparadores en las bases de datos, no he necesitado usar una n durante muchos años y espero que no necesite recurrir a uno. –

+0

Estoy de acuerdo, pero a veces es la única manera de hacerlo :-) –

1

El que sigue teniendo tales problema: SQL Server 2012 ahora lo permite

Cuestiones relacionadas