masterデータベースに接続している特定のデータベース(データベースのグループではない)からテーブルのリストをロードする際に、特有の問題が発生します。現在、私のクエリはサーバー上のすべてのデータベースを読み込み、RAISERROR
を経由してクライアントに情報を返すデータベースをループします。このループが実行されていると、照会が完了すると、後で送信するために現在のデータベースのすべてのテーブルをロードするためにネストされたループが必要です(SELECT
)。私が実行している問題は、これがC#コード内で単一のクエリとして実行されることです。理想的には、すべてをSQLでロードして、処理のためにクライアントに返したいと思います。例:SQL:特定のデータベースから別のテーブルに接続するとき
WHILE (@dbLoop < @dbCount) BEGIN
-- Do cool things and send details back to client.
SET @dbName = (SELECT _name FROM dbTemp WHERE _id = @dbLoop);
-- USE [@dbName]
-- Get a count of the tables from info schema on the newly specified database.
WHILE (@tableLoop < @tableCount) BEGIN
-- USE [@dbName]
-- Do super cool things and load tables from info schema.
SET @tableLoop += 1;
END
SET @dbLoop += 1;
END
-- Return the list of tables from all databases to the client for use with SQLDataAdapter.
SELECT * FROM tableTemp;
このトピックはかなり単純です。 SqlConnection
オブジェクトの接続を変更せずに、指定したデータベースのテーブルにアクセスする方法が必要です(C#コードのループを各データベースで同じクエリを処理する必要はありません)。 C#側。すべてをSQLにロードしてアプリケーションに返す方が効率的です。これで提供できるヘルプは素晴らしいでしょう!
おかげで、 ジェイミー
? –
これについて考えてみると、マイクロソフトが提供するもの以外にストアドプロシージャを使用するのではなく、セキュリティ上のリスクがあると言われました。また、カーソルクエリを使用しない理由を誰かが尋ねる場合でも、私たちのDBAはカーソルクエリを許可しません。 – lxxtacoxxl
@lxxtacoxxl - 実際は逆です - SPははるかに安全です。 – Hogan