【问题标题】:Coldfusion server mapping to sql serverColdfusion服务器映射到sql server
【发布时间】:2012-05-16 12:11:27
【问题描述】:

我有一个连接到 MySQL 数据库的 ColdFusion 服务器。现在我将数据库更改为现有的 MSSql 服务器。MSSql 服务器具有与 MySQL 相似的数据库,但表名和列名不同。我的问题是,如何在不更改 ColdFusion 代码的情况下将新的 MSSql 服务器映射到 ColdFusion 服务器。意味着不更改 ColdFusion 代码中的表名和列名。

提前致谢

【问题讨论】:

    标签: mysql sql-server database coldfusion


    【解决方案1】:

    如果架构不同(不同的列名和列数),那么您可能别无选择,只能重构 CF 代码以反映新的 MSSQL 架构。如果从一个数据库到下一个数据库的表和列名之间存在一对一的关系,您可以使用视图 - 但这会导致开发环境非常混乱。同样......每个表都必须“匹配”列数和数据类型。示例

    Old table  "users"
    firstname, lastname address
    
    New table "tblUsers" 
    fname, lname, addr
    

    鉴于上述架构,您的 CF 代码中可能有如下查询:

    <cfquery name="getUsers" datasource="blah">
    SELECT firstname, lastname, address
    </cfquery>
    

    所以当你切换数据库时它会失败。但是,如果您创建了这样的视图:

    CREATE    VIEW [dbo].[Users]
    AS
    SELECT  u.fname AS firstname, 
            u.lname AS lastname
            u.addr AS address
    FROM    dbo.tblusers
    

    那么你的代码就可以工作了。我再次不推荐这个。您最好的做法是更改架构以反映您的代码或重构您的代码以针对新架构工作。但从技术上讲,它确实回答了你的问题:)

    【讨论】:

    • 从经验上讲,视图与表名同名(这是您在不接触 CF 代码的情况下必须做的事情),是一个真正的 对任何未来的开发者来说都是痛苦的。它还可以防止任何其他代码访问必须重命名的原始表。
    • 使用 sql View 是一个不错的选择,但是当需要插入和更新查询时该怎么办.. 那更复杂...
    • @cfde - 从技术上讲,您可以在命令上运行 INSERT/UPDATE 一个简单的视图。虽然有一些限制。但是,我同意从长远来看,修改架构是更明智的做法。
    【解决方案2】:

    除非您已经在使用 ORM,否则 CF 中没有方便的函数或映射机制可以让您执行此操作。在驱动程序级别可能会有一些操作,或者浸入创建 sql 字符串以在那里进行文本解析的 java 代码,但这超出了我的专业领域。

    不过,我的猜测是,您有很多查询分散在整个应用程序中,因此对重做所有查询的任务感到畏惧。就个人而言,我至少会将这个应用程序的数据访问重构为一个或多个 .cfc。即使您所做的只是将每个查询包装到一个函数调用中并将 cfquery 代码替换为一个函数调用,您也可以将所有数据库调用整合到一个地方,并且可以更轻松地进行更改。

    【讨论】:

    • 使用 ORM 是一个不错的选择,但我需要在不改变代码的情况下做一些事情..
    猜你喜欢
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-11
    • 2020-09-19
    • 2011-12-10
    相关资源
    最近更新 更多