我有两个数据库和一个使用VS 2010中的实体数据模型获取/设置数据的应用程序。
我在DB(A)中执行完整存储过程,然后使用DB(B)中的EXEC语句返回数据。数据返回正常并且是正确的,但每当我运行程序时,我在C#中得到以下异常:
'GetAverageTimes_Result'上的'AbandonTime'属性无法设置为'String'值。您必须将此属性设置为“Decimal”类型的非null值。
我已经在数据模型中检查过,值是Decimal并设置为可空等等。即使我将其更改为任何其他类型或不可为空的值,我仍然会得到相同的错误。令人难以置信的是令人沮丧。
任何帮助将不胜感激。
答案 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]