从不同数据库中选择数据

时间:2012-10-03 11:54:18

标签: asp.net sql ado.net-entity-data-model

我有两个数据库和一个使用VS 2010中的实体数据模型获取/设置数据的应用程序。

我在DB(A)中执行完整存储过程,然后使用DB(B)中的EXEC语句返回数据。数据返回正常并且是正确的,但每当我运行程序时,我在C#中得到以下异常:

'GetAverageTimes_Result'上的'AbandonTime'属性无法设置为'String'值。您必须将此属性设置为“Decimal”类型的非null值。

我已经在数据模型中检查过,值是Decimal并设置为可空等等。即使我将其更改为任何其他类型或不可为空的值,我仍然会得到相同的错误。令人难以置信的是令人沮丧。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果序列在EACH数据库的主表上,那么您可以使用完全限定名称将表连接在一起:

创建视图vWhatever

AS

SELECT(无论你想选择什么)

FROM [数据库A]。[架构 - 通常是dbo] .DSNA_tblMaiin AS a

加入[数据库B]。[dbo] .DSNB_tblMaiin AS b ON a.Serialnumber = b.SerialNumber

加入[数据库C]。[dbo] .DSNC_tblMaiin AS c ON a.SerialNumber = c.SerialNumber

WHERE(无论你想过滤什么)

GO

如果资产位于其中一个表中,但不是全部三个(并且您不知道哪一个),您可以在视图中使用UNION来完成它 - 它实际上将所有三个表放在一起,附加您指定的字段(具有相同的数据类型),直到您有一个大的“虚拟表”ex:

创建视图vWhatever

AS

SELECT col1,col2,SerialNumber等

FROM [数据库A]。[dbo] .DSNA_tblMaiin

UNION ALL

SELECT col1,col2,SerialNumber等

FROM [数据库B]。[dbo] .DSNB_tblMaiin

UNION ALL

SELECT col1,col2,SerialNumber等

FROM [Database C]。[dbo] .DSNC_tblMaiin

GO

点符号正是你所看到的。如果你将查询扩展到另一台服务器,它只是[ServerName]。[DatabaseName]。[ObjectSchema]。[ObjectName]而不是[DatabaseName]。[ObjectSchema]。[ObjectName]