0

MySQL データベースに接続された ColdFusion サーバーがあります。現在、データベースを既存の MSSql サーバーに変更しています。MSSql サーバーには MySQL と同様のデータベースがありますが、テーブル名と列名が異なります。私の質問は、ColdFusion コードを変更せずに新しい MSSql サーバーを ColdFusion サーバーにマップするにはどうすればよいかということです.ColdFusion コードのテーブル名と列名を変更せずに..

前もって感謝します

4

2 に答える 2

2

スキーマが異なる (列名と列数が異なる) 場合は、新しい MSSQL スキーマを反映するように CF コードをリファクタリングするしかない可能性があります。ある DB から次の DB へのテーブル名と列名の間に 1 対 1 の関係がある場合は、ビューを使用できますが、非常に混乱する開発環境になります。繰り返しますが...各テーブルは、列の数とデータの種類について「一致」する必要があります。例

Old table  "users"
firstname, lastname address

New table "tblUsers" 
fname, lname, addr

上記のスキーマを考えると、次のようなクエリが CF コードに含まれている可能性があります。

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

したがって、DBを切り替えると失敗します。ただし、次のようなビューを作成した場合:

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

次に、コードが機能します。繰り返しますが、これはお勧めしません。最善の方法は、コードを反映するようにスキーマを変更するか、新しいスキーマに対して機能するようにコードをリファクタリングすることです。しかし、技術的にはあなたの質問に答えます:)

于 2012-05-16T12:52:13.310 に答える
0

すでに ORM を使用していない限り、これを可能にする CF の便利な関数またはマッピング メカニズムはありません。ドライバー レベルで何らかの操作を行ったり、SQL 文字列を作成してそこでテキスト解析を行う Java コードに手を加えたりしている可能性がありますが、それは私の専門知識の範囲外です。

ただし、アプリケーション全体に多数のクエリが散らばっているため、それらすべてをやり直す作業に気が遠くなってしまうのではないでしょうか。個人的には、少なくともこのアプリのデータ アクセスを 1 つ以上の .cfc にリファクタリングします。各クエリを関数呼び出しにラップし、cfquery コードを関数呼び出しに置き換えるだけの場合でも、すべてのデータベース呼び出しを 1 か所に統合​​しているので、今後ははるかに簡単に変更できます。

于 2012-05-16T13:13:43.400 に答える