3

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

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

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

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

任何帮助将不胜感激。

4

1 回答 1

0

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

创建视图 vWhatever

作为

SELECT(无论你想选择什么)

FROM [Database A].[schema - 通常是 dbo].DSNA_tblMaiin AS

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(无论您想过滤什么)

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

创建视图 vWhatever

作为

选择 col1、col2、序列号等。

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

联合所有

选择 col1、col2、序列号等。

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

联合所有

选择 col1、col2、序列号等。

FROM [数据库 C].[dbo].DSNC_tblMaiin

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

于 2013-02-06T12:32:21.347 回答