【问题标题】:Changing code from MS SQL Server to MySQL将代码从 MS SQL Server 更改为 MySQL
【发布时间】:2012-05-22 15:51:22
【问题描述】:

如何将它从 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

【问题讨论】:

  • 我假设第二块是你的 MySQL 代码,如果是这样,它失败的原因是因为 mysql 没有地理位。 STPointFromText 是您必须手动执行的操作。很可能,这将不得不在外部进行编码。
  • 为什么必须手动或外部完成? MySQL 支持几乎与 SQL Server 完全相同的 OGC 标准——只是语法略有不同。 dev.mysql.com/doc/refman/5.0/en/gis-introduction.html

标签: mysql sql-server


【解决方案1】:

您是否尝试过 MySQL 迁移工具包?

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

现在很难找到,但我相信您也可以使用 MySQL Workbench 来完成此任务。 http://www.mysql.com/products/workbench/

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

【讨论】:

  • 我从同事那里借用代码,所以我无法访问物理数据库以便从 MySQL Workbench 中隐藏它。
  • 忽略这一点,但是当我在转向 StackOverflow 之前进行背景研究时,谁是我问题的混蛋?
  • 不承诺这是一个解决方案,但如果您手头有 SQL Server 的副本,您始终可以使用此过程创建一个非常简单的架构并尝试迁移它。不过,我真的很害怕地理方面的东西会成为你的砖墙。
【解决方案2】:

对于初学者来说,MySQL 仅在配置启用了空间扩展时才支持空间数据 (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),因此您可以简单地将 geography::STPointFromText 的引用替换为 PointFromText

但是,要从单个纬度/经度坐标对插入点,最简单的方法是 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 2016-08-30
    • 2023-03-27
    • 2012-10-23
    • 1970-01-01
    相关资源
    最近更新 更多