从具有相同表架构的所有数据库中检索数据

本文关键字:数据库 检索 数据 | 更新日期: 2023-09-27 17:58:51

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

但里面的数据不同

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

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

我可以用SQL ServerC# 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 ]     } 

从具有相同表架构的所有数据库中检索数据

如果完全限定表名(如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的链接。

您可以使用linq进行sql并生成dbml文件。

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

MyDataContext firstDB = new MyDataContext(someConnectionstring);
MyDataContext secondDB = new MyDataContext(someOtherConnectionstring);