2

タイトルが既に述べているように、 SQLMetal を使用してdbmlファイルを作成しようとしていますか? このアクションの背景は、 MVC-Applicationで使用するためのすべてのテーブル、関数、ビュー、ストアド プロシージャなどを含むC# コードファイルを作成することです。

今問題に。コマンドから SQLMetal を起動すると、時間がかかり、マイナーな警告が表示され、エラー (DBML1057) が発生します。エラー メッセージを読むと、SQLMetal は存在しないストアド プロシージャを抽出しようとしています。私はデータベースを十数回調べましたが、そのような手順を見つけることができませんでした. たぶん、この手順はずっと前に呼び出されました。つまり、「 GetGameDatesDesc 」という名前の SP を作成し、後で名前を「GetGameDates」に変更します。SQLMetal (私の場合) は " GetGameDateDesc " を探していると思います。しかし、SQLMetal はこの情報をどこから入手したのでしょうか? データベースに単語が見つかりません。私はすべてのビュー、関数を調べました...ボットは役に立ちませんでした。この関数は、データベースの一部ではなくなりました。

編集 -------------- 2011 年 2 月 14 日 --------------

SQLMetal からの警告は次のとおりです。

エラー DBML1042: Type 要素 ' GetGameDatesDesc ' の Column 要素のメンバー属性 ' CCode 'は既に使用されています。エラー DBML1057: Type ' GetGameDatesDesc 'の Column 要素のstorage 属性またはそのデフォルト値 ' _CCode 'は既に使用されています。

4

2 に答える 2

0

これは SqlMetal の残念な制限です。SQL Server information_schema の SP コードは 4000 文字に制限されているため、SqlMetal はsys.sql_modulesビューを使用して SP を探します。ただし、そのビューはsp_rename関数によって更新されないため、SP の名前を変更すると、SqlMetal は正しく機能しません。sp_renameのドキュメントに記載されている推奨事項は、次の種類のオブジェクトを削除して再作成することです。

ストアド プロシージャ、関数、ビュー、またはトリガーの名前を変更しても、sys.sql_modules カタログ ビューの定義列にある対応するオブジェクト名は変更されません。したがって、sp_rename を使用してこれらのオブジェクト タイプの名前を変更しないことをお勧めします。代わりに、オブジェクトをドロップして新しい名前で再作成してください。

解決策は、その SP を削除して再作成することです。これは、SQL Server が object_id を使用して対応するsys.sql_modules行を削除するためです。

于 2011-02-13T18:58:34.993 に答える
0

既存のストアド プロシージャの 1 つにエラーがあるようです。一部のストアド プロシージャを削除または名前変更しても、別のストアド プロシージャには削除または名前変更された呼び出しが残っている場合があります。SQL Management Studio を使用してすべてのストアド プロシージャを作成する SQL スクリプトを生成し (データベースを右クリック -> [タスク] -> [スクリプトの生成])、生成されたスクリプト ストアド プロシージャ名でエラーの原因を検索します。

于 2011-02-13T18:51:17.840 に答える