1

我创建了ASP.NET C#Web 应用程序(使用数据库作为SQL Server 2008)。我的应用程序连接到不同的数据库(假设计数为 10)。它们都具有相同的结构,即相同的表名称、存储过程名称、SP 参数计数和类型、表架构都是相同的。

但是里面的数据不一样。

dbo.usp_getData1我在每个接受一些参数的数据库中都有存储过程,它会进行一些表扫描并检索仅与该数据库相关的数据。

我的问题是如何仅使用一个存储过程(因为参数/表结构相同)从我的所有数据库中检索数据?

我可以通过SQL Server或实现相同的目标C# Coding

意见对我有帮助吗?

CREATE VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ] 
[ WITH <view_attribute> [ ,...n ] ] 
AS select_statement 
[ WITH CHECK OPTION ] [ ; ]

<view_attribute> ::= 
{
    [ ENCRYPTION ]
    [ SCHEMABINDING ]
    [ VIEW_METADATA ]     } 
4

2 回答 2

1

如果您完全限定表名(如 Database.Schema.Table),则可以从多个数据库(在同一台服务器上)中进行选择。

参见例如 http://www.sqlteam.com/article/selecting-data-from-different-databases

如果您想将数据库名称作为参数传递给您的存储过程,您可能不得不求助于动态 SQL,尽管这可能会打开一个全新的蠕虫罐。

参见例如 SQL 2000 表名作为存储过程中的变量http://www.sommarskog.se/dynamic_sql.html

简单的例子:

CREATE PROCEDURE SelectEverything
    @tableName NVARCHAR(250)
AS
BEGIN
    DECLARE @sql NVARCHAR(500)
    SET @sql = 'SELECT * FROM ' + @tableName;
    EXEC(@sql);
END
GO

如果你执行这个过程:

EXEC dbo.SelectEverything 'SomeOtherDatabase.dbo.SomeTable'

它将选择数据库 SomeOtherDatabase 的模式 dbo 中表 SomeTable 的所有内容。

但请阅读有关动态 SQL 的链接。

于 2013-02-12T10:24:23.857 回答
0

您可以使用linq to sql并生成一个dbml 文件

然后您可以在初始化数据上下文时通过调整连接字符串来访问每个数据库:

MyDataContext firstDB = new MyDataContext(someConnectionstring);
MyDataContext secondDB = new MyDataContext(someOtherConnectionstring);
于 2013-02-12T11:03:09.430 回答