1

ASP.NET C#Webアプリケーションを作成しました(データベースをとしてSQL Server 2008)。私のアプリケーションはさまざまなデータベースに接続します(Say Countは10です)。それらはすべて同じ構造を持っています。つまり、同じテーブル名、ストアドプロシージャ名、SP引数の数とタイプ、テーブルスキーマはすべて同じです。

しかし、内部のデータは異なります。

いくつかのパラメータdbo.usp_getData1を受け入れるすべてのデータベース内にプロシージャを格納し、テーブルスキャンを実行して、そのデータベースのみに関するデータを取得しました。

私の質問は、ストアドプロシージャの1つだけを使用してすべてのデータベースからデータを取得するにはどうすればよいですか(パラメータ/テーブル構造が同じであるため)?

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に頼る必要がありますが、これにより、まったく新しいワームの缶が開かれる可能性があります。

たとえば 、ストアドプロシージャの変数としてのSQL2000テーブル名および 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

このprocを実行する場合:

EXEC dbo.SelectEverything 'SomeOtherDatabase.dbo.SomeTable'

データベースSomeOtherDatabaseのスキーマdboにあるテーブルSomeTableのすべてを選択します。

ただし、動的SQLに関するリンクをお読みください。

于 2013-02-12T10:24:23.857 に答える
0

linqを使用してSQLを実行し、 dbmlファイルを生成できます。

そして、データコンテキストを初期化するときに接続文字列を調整して、すべてのデータベースにアクセスできます。

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