Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从具有相同表架构的所有数据库检索数据_C#_Asp.net_Sql_Sql Server - Fatal编程技术网

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编码实现同样的功能 你的观点对我有

我创建了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写入?要添加多个表或数据库名称,请参见此处,或者要迭代多个值,请遵循上面链接中的示例,或者使用。用于组合多个选择的结果。