C# 从具有相同表架构的所有数据库检索数据
我创建了ASP.NET C Web应用程序,数据库为SQL Server 2008。我的应用程序连接到不同的数据库说计数是10。它们都具有相同的结构,即相同的表名、存储过程名、SP参数计数和类型、表架构都相同 但里面的数据是不同的 我在每个数据库dbo.usp_getData1中都有一个存储过程,它接受一些参数,执行一些表扫描,并仅检索该数据库的数据 我的问题是,当参数/表结构相同时,如何仅使用一个存储过程从所有数据库检索数据 我可以通过SQL Server或C编码实现同样的功能 你的观点对我有帮助吗C# 从具有相同表架构的所有数据库检索数据,c#,asp.net,sql,sql-server,C#,Asp.net,Sql,Sql Server,我创建了ASP.NET C Web应用程序,数据库为SQL Server 2008。我的应用程序连接到不同的数据库说计数是10。它们都具有相同的结构,即相同的表名、存储过程名、SP参数计数和类型、表架构都相同 但里面的数据是不同的 我在每个数据库dbo.usp_getData1中都有一个存储过程,它接受一些参数,执行一些表扫描,并仅检索该数据库的数据 我的问题是,当参数/表结构相同时,如何仅使用一个存储过程从所有数据库检索数据 我可以通过SQL Server或C编码实现同样的功能 你的观点对我有
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,则可以从同一服务器上的多个数据库中进行选择 见例。 如果希望将数据库名称作为参数传递给存储过程,则可能必须求助于动态SQL,尽管这可能会导致新的蠕虫 见例。 和 简单的例子:
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的链接。如果完全限定表名,如Database.Schema.table,则可以从同一服务器上的多个数据库中进行选择 见例。 如果希望将数据库名称作为参数传递给存储过程,则可能必须求助于动态SQL,尽管这可能会导致新的蠕虫 见例。 和 简单的例子:
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的链接。您可以使用并生成一个动态SQL
然后,您可以在初始化datacontext时通过调整connectionstring来访问每个数据库:
MyDataContext firstDB = new MyDataContext(someConnectionstring);
MyDataContext secondDB = new MyDataContext(someOtherConnectionstring);
您可以使用并生成一个
然后,您可以在初始化datacontext时通过调整connectionstring来访问每个数据库:
MyDataContext firstDB = new MyDataContext(someConnectionstring);
MyDataContext secondDB = new MyDataContext(someOtherConnectionstring);
因此,我可以将数据库名称作为参数传递给SP,而SP将仅从该数据库返回数据吗?我如何在SP中传递多个数据库名称,而SP将结果集合并为一个?可以。我在原始答案中添加了一个简单的示例。SP中有10多个表。我可以传递数据库名称吗。并对我传递的所有数据库名称使用我的SP代码之类的SP写入?要添加多个表或数据库名称,请参见此处,或者要迭代多个值,请遵循上面链接中的示例,或者使用。用于组合多个选择的结果。因此,我是否可以将数据库名称作为参数传递给我的SP,而我的SP将只返回该数据库中的数据?我如何在我的SP中传递多个数据库名称,而我的SP将把结果集合并为一个?是。我在原始答案中添加了一个简单的示例。SP中有10多个表。我可以传递数据库名称吗。并对我传递的所有数据库名称使用我的SP代码之类的SP写入?要添加多个表或数据库名称,请参见此处,或者要迭代多个值,请遵循上面链接中的示例,或者使用。用于组合多个选择的结果。