3

2 つの DB と、VS 2010 でエンティティ データ モデルを使用してデータを取得/設定するアプリケーションがあります。

DB(A) で完全なストアド プロシージャを実行し、DB(B) で EXEC ステートメントを使用してデータを返します。データは正常に返され、正しいものですが、プログラムを実行するたびに C# で次の例外が発生します。

「GetAverageTimes_Result」の「AbandonTime」プロパティを「文字列」値に設定できませんでした。このプロパティは、'Decimal' 型の null 以外の値に設定する必要があります。

データモデルのどこでもチェックしましたが、値は10進数で、null許容などに設定されています。これを他のタイプまたはnull不可の値に変更しても、同じエラーが発生します。それは信じられないほどイライラします。

どんな助けでも大歓迎です。

4

1 に答える 1

0

シリアルが各データベースのメイン テーブルにある場合は、完全修飾名を使用してテーブルを結合できます。

CREATE VIEW vWhatever

なので

SELECT (選択したいものは何でも)

FROM [データベース A].[スキーマ - 通常は dbo].DSNA_tblMaiin AS a

JOIN [データベース B].[dbo].DSNB_tblMaiin AS b ON a.Serialnumber = b.SerialNumber

JOIN [データベース C].[dbo].DSNC_tblMaiin AS c ON a.SerialNumber = c.SerialNumber

WHERE (フィルタリングするものは何でも)

行く

アセットがテーブルの 1 つにあり、3 つすべてではない場合 (そしてどのテーブルかわからなかった場合)、ビュー内で UNION を使用してそれを実現できます。基本的に、3 つのテーブルすべてをまとめて、大きな「仮想テーブル」が1つになるまで(同じデータ型で)指定します。例:

CREATE VIEW vWhatever

なので

col1、col2、SerialNumber などを選択します。

FROM [データベース A].[dbo].DSNA_tblMainin

ユニオンオール

col1、col2、SerialNumber などを選択します。

FROM [データベース B].[dbo].DSNB_tblMainin

ユニオンオール

col1、col2、SerialNumber などを選択します。

FROM [データベース C].[dbo].DSNC_tblMainin

行く

ドット表記はまさにあなたが見ているものです。また、クエリを別のサーバーに拡張する場合は、[DatabaseName].[ObjectSchema].[ObjectName] ではなく [ServerName].[DatabaseName].[ObjectSchema].[ObjectName] になります。

于 2013-02-06T12:32:21.347 に答える