sql-server - vinculado - sql server descargar
Servidores espaciales y vinculados de SQL Server (3)
Encontré el mismo problema, pero la solución aceptada no era una opción en mi caso, debido a que muchas aplicaciones no se podían cambiar para esperar una consulta totalmente diferente.
En cambio, creo que encontré una manera de engañar al sistema. En el servidor local ejecute:
CREATE VIEW stage_table
AS
SELECT *
FROM OPENQUERY([REMOTESERVER],''SELECT * FROM [REMOTEDB].[SCHEMA].TARGET_TABLE'');
GO
CREATE SYNONYM TARGET_TABLE FOR stage_table;
GO
Voila, ahora puedes simplemente usar
SELECT * FROM TARGET_TABLE;
Que es probablemente lo que esperan sus aplicaciones.
Probé el escenario anterior con el servidor local: SQLEXPRESS 2008 R2 y el servidor remoto SQL EXPRESS 2014.
Tengo una instancia de SQL Server que he agregado un servidor vinculado a otra instancia de SQL. La tabla a la que estoy accediendo en el servidor vinculado contiene tipos espaciales. Cuando intento consultar la tabla recibo un error:
Los objetos que exponen columnas con tipos CLR no están permitidos en consultas distribuidas. Utilice una consulta de paso para acceder al objeto remoto.
Si uso OPENQUERY
con la misma consulta, obtengo otro error:
Se ha producido un error grave en el comando actual. Los resultados, en su caso, deben ser descartados.
¿Hay alguna forma de consultar tablas que contengan tipos espaciales a través de servidores vinculados?
Tengo otra solución. No se aplica a la pregunta del OP, ya que intentaron seleccionar los datos espaciales. Incluso si no selecciona las columnas que contienen datos espaciales, seguirá recibiendo este error. Entonces, si necesita consultar una tabla de este tipo y no necesita recuperar los datos espaciales, puede crear una vista para la tabla (seleccionando solo las columnas que necesita, excluyendo las columnas de datos espaciales) y luego consultar contra esa vista. .
Una forma de evitar esto es pasar datos espaciales como NVARCHAR (MAX)
select go=geometry::STGeomFromText(go,0)
from openquery([other/instance],
''select go=convert(nvarchar(max),go) from tempdb.dbo.geom'')
nota: go
es un nombre de columna, abreviatura de objeto de geometría
O usando la función en lugar de la conversión explícita
select go=geometry::STGeomFromText(go,0)
from openquery([other/instance],
''select go=go.STAsText() from tempdb.dbo.geom'')