将代码从MS SQL Server更改为MySQL

时间:2012-05-22 15:51:22

标签: mysql sql-server

如何将其从MS SQL SERVER转换为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

我的代码导致第4行出错,不确定原因?

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

2 个答案:

答案 0 :(得分:0)

您是否尝试过MySQL Migration Toolkit?

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

现在找起来有点难,但我相信你也可以使用MySQL Workbench来实现这一目标。 http://www.mysql.com/products/workbench/

我建议您只迁移整个架构,该架构应该为您移植程序。

答案 1 :(得分:0)

对于初学者,MySQL仅在配置了启用Spatial Extensions的情况下才支持空间数据(http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html)。假设您已经完成了设置,您只需要将SQL Server语法调整为适当的MySQL方法。

MySQL有一个PointFromText()方法(http://dev.mysql.com/doc/refman/5.0/en/creating-spatial-values.html#function_pointfromtext),它反映了SQL Server的STPointFromText()的行为( http://msdn.microsoft.com/en-us/library/bb933979.aspx),所以你只需用 PointFromText <替换 geography :: STPointFromText 的引用/ p>

但是,对于从单个纬度/经度坐标对中插入点,最简单的方法是使用Point()(http://dev.mysql.com/doc/refman/5.0/en/creating -spatial-values.html #function_point),在这种情况下,您的代码只会变为:

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