我有一个连接到 MySQL 数据库的 ColdFusion 服务器。现在我将数据库更改为现有的 MSSql 服务器。MSSql 服务器具有与 MySQL 相似的数据库,但表名和列名不同。我的问题是,如何在不更改 ColdFusion 代码的情况下将新的 MSSql 服务器映射到 ColdFusion 服务器。意味着不更改 ColdFusion 代码中的表名和列名。
提前致谢
我有一个连接到 MySQL 数据库的 ColdFusion 服务器。现在我将数据库更改为现有的 MSSql 服务器。MSSql 服务器具有与 MySQL 相似的数据库,但表名和列名不同。我的问题是,如何在不更改 ColdFusion 代码的情况下将新的 MSSql 服务器映射到 ColdFusion 服务器。意味着不更改 ColdFusion 代码中的表名和列名。
提前致谢
如果架构不同(不同的列名和列数),那么您可能别无选择,只能重构 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
然后你的代码就可以工作了。我再次不推荐这个。您最好的做法是更改架构以反映您的代码或重构您的代码以针对新架构工作。但从技术上讲,它确实回答了你的问题:)
除非您已经在使用 ORM,否则 CF 中没有方便的函数或映射机制允许您执行此操作。在驱动程序级别可能会有一些操作,或者浸入创建 sql 字符串以在那里进行文本解析的 java 代码,但这超出了我的专业领域。
不过,我的猜测是,您有很多查询分散在整个应用程序中,因此对重做所有查询的任务感到畏惧。就个人而言,我至少会将这个应用程序的数据访问重构为一个或多个 .cfc。即使您所做的只是将每个查询包装到一个函数调用中并将 cfquery 代码替换为一个函数调用,您也可以将所有数据库调用整合到一个地方,并且可以更轻松地进行更改。