使用相同的表模式从所有数据库中检索数据

时间:2013-02-12 10:11:18

标签: c# asp.net sql sql-server

我创建了ASP.NET C# Web应用程序(数据库为SQL Server 2008)。我的应用程序连接到不同的数据库(Say Count是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 ]     } 

2 个答案:

答案 0 :(得分:1)

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

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

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

参见例如 SQL 2000 Table Name as variable in stored procedurehttp://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

如果执行此proc:

EXEC dbo.SelectEverything 'SomeOtherDatabase.dbo.SomeTable'

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

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

答案 1 :(得分:0)

您可以使用linq to sql并生成dbml file

然后,您可以在初始化datacontext时调整connectionstring来访问每个数据库:

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