Cambiar el código de MS SQL Server a MySQL

¿Cómo puedo convertir esto de MS SQL SERVER a MySQL?

/****** Object: StoredProcedure [dbo].[geolocation_refresh_geography] Script Date: 05/08/2012 22:02:26 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create procedure [dbo].[geolocation_refresh_geography]
as
update locations
SET geolocation = geography::STPointFromText('POINT(' + CAST([Longitude] AS VARCHAR(20)) + ' ' + CAST([Latitude] AS VARCHAR(20)) + ')', 4326)
where geolocation is null
GO

Mi código está causando errores en la línea 4, ¿no estoy seguro de por qué?

create procedure geolocation_refresh_geography()
BEGIN
update locations
SET geolocation = geography::STPointFromText('POINT(' + CAST(Longitude AS VARCHAR(20)) + ' ' + CAST(Latitude AS VARCHAR(20)) + ')', 4326)
where geolocation is null
END

preguntado el 22 de mayo de 12 a las 16:05

Supongo que el bloque dos es su código MySQL, si es así, la razón por la que falla es porque mysql no tiene el bit de geografía. El STPointFromText es algo que tendrá que hacer manualmente. Lo más probable es que esto tenga que codificarse externamente. -

¿Por qué diablos tiene que hacerse manualmente o externamente? MySQL admite casi exactamente los mismos estándares OGC que SQL Server, solo que la sintaxis es ligeramente diferente. dev.mysql.com/doc/refman/5.0/en/gis-introduction.html -

2 Respuestas

¿Has probado el kit de herramientas de migración de MySQL?

http://dev.mysql.com/doc/migration-toolkit/en/mysql-migration-toolkit-indepth-sourcedb-mssql.html

Es un poco difícil de encontrar en estos días, pero creo que también puede usar MySQL Workbench para lograr esto. http://www.mysql.com/products/workbench/

Recomendaría simplemente migrar todo su esquema, lo que debería portar el procedimiento por usted.

contestado el 22 de mayo de 12 a las 16:05

Estoy tomando prestado el código de un compañero de trabajo, por lo que no tengo acceso a la base de datos física para convertirlo en MySQL Workbench. - arrogancia937

ignore esto, pero ¿quiénes son los idiotas que respondieron mis preguntas cuando realicé una investigación de antecedentes antes de recurrir a StackOverflow? - arrogancia937

No hay promesas de que esto sea una solución, pero si tiene una copia del servidor SQL a mano, siempre puede crear un esquema realmente simple con este procedimiento e intentar migrarlo. Sin embargo, tengo mucho miedo de que las cosas de la geografía vayan a ser tu pared de ladrillos. - amstrong

Para empezar, MySQL admite datos espaciales solo si está configurado con extensiones espaciales habilitadas (http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html). Suponiendo que tenga esa configuración, solo necesita adaptar la sintaxis de SQL Server al método MySQL apropiado.

MySQL tiene un método PointFromText() (http://dev.mysql.com/doc/refman/5.0/en/creating-spatial-values.html#function_pointfromtext) que refleja el comportamiento de STPointFromText() de SQL Server (http:/ /msdn.microsoft.com/en-us/library/bb933979.aspx), por lo que simplemente podría reemplazar la referencia a geografía::STPointFromText con PuntoDesdeTexto

Sin embargo, para insertar puntos de un solo par de coordenadas de latitud/longitud como lo está haciendo, el método más fácil de usar es Point() (http://dev.mysql.com/doc/refman/5.0/en/creating-spatial- valores.html#function_point), en cuyo caso su código simplemente se convierte en:

create procedure geolocation_refresh_geography()
BEGIN
update locations
SET geolocation = Point(Longitude, Latitude)
where geolocation is null
END

contestado el 22 de mayo de 12 a las 21:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.