問題タブ [sp-msforeachdb]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql-server - sp_msforeachdb のようなクエリのヘルプ
私がいるところでは、メインフレーム システムで実行されているソフトウェア パッケージがあります。メインフレームは、各クライアントがサーバー内に独自のデータベースを持つように、夜間に SQL サーバーにダンプを作成します。サーバー インスタンスには他にもいくつかのデータベースがあり、データのない古いクライアント データベースもいくつかあります。
多くの場合、すべてのクライアントでレポートを実行したり、データを確認したりする必要があります。sp_msforeachdb などを使用してクエリを実行できるようにしたいのですが、リストから不要なデータベースをフィルタリングする方法がわかりません。これがどのように機能するかについて何か考えはありますか?
まだ SQL Server 2000 を使用していますが、数か月以内に 2005 に移行する予定です。
更新:
この質問をするのはうまくいかなかったと思うので、目標を明確にしてから、最終的に使用したソリューションを投稿します。
ここで私が達成したいのは、プログラムで使用するクエリに取り組んでいるプログラマーが、1 つのクライアント データベースを使用してクエリを記述し、1 つのクライアントのデータベースで設計および構築されたコードを 50 のすべてのデータベースでほぼ瞬時に実行 (テスト) できるようにすることです。ほとんど、またはまったく変更を加えずに、クライアント データベースを作成します。
それを念頭に置いて、現在Management Studioにある私のコードは次のとおりです(部分的に難読化されています):
これの良いところは、@sql 変数をクエリ テキストに設定するだけでよいことです。ストアド プロシージャに変換するのは非常に簡単です。これは動的SQLですが、繰り返しになりますが、開発にのみ使用されます(有名な最後の言葉;))。欠点は、クエリで使用される一重引用符をエスケープする必要があり、多くの場合、選択リストに余分な''?'' As ClientDB
列を追加することになりますが、それ以外は十分に機能します。
今日、別の本当に良いアイデアが得られない限り、これをストアド プロシージャに変換し、一時テーブルを使用してテーブル値関数としてバージョンをまとめて、すべての結果を 1 つの結果セットに入れたいと思います (選択クエリのみ)。
sql-server - sp_MSforeachdbMSSQLエラー
これはMSSQL2005の場合です。最初のステートメントが成功し、同じステートメントを2つ続けて作成すると失敗する理由を知っている人はいますか?すべてのステートメントはまったく同じです。二重引用符を2つの一重引用符に変更しても、同じ効果があります。
sp
_
MSforeachdb @ command1 ='if(left( "?"、2)= "p_
")begin; 印刷"?"; 終わり;';を生成します
p
_
NationalBrands
p_
NonBrandpPアンダーバーで始まるデータベース名
_ _ __
_
_
_
_
_
_
しかし
sp
_
MSforeachdb @ command1 ='if(left( "?"、2)= "p_
")begin; 印刷"?"; 終わり;';
sp_
MSforeachdb @ command1 ='if(left( "?"、2)= "p_
")begin; 印刷"?"; 終わり;';を生成します
メッセージ102、レベル15、状態1、行2'sp_MSforeachdb'の近くの構文が正しくありません。
sql-server - sp_MSforeachdbクエリヘルプ
私は同じデータベースをたくさん使用しているので、テーブルから情報を取得できるようにsp_MSforeachdbプロシージャを使用しています。
私が遭遇した問題は、テーブルを持たない他のデータベースがボックスにあるため、無効なオブジェクトエラーをスローしていることです。
これが私が現在持っているものです。同じテーブルを持っているのでLoginDatabaseをフィルタリングしていますが、クエリではそれを望んでいません。
私の質問は、情報を取得したいテーブルを持つデータベースだけに制限するにはどうすればよいかということです。
sql-server - サーバー上の各データベースのテーブルを更新したい
同じフィールド「SMTP_Server」を持つ構成テーブルがあります。サーバー上の各データベースのフィールドを新しい値で更新したいと考えています。
sp_foreachdb
最後のテーブルを更新します (最後のデータベース内)。なんで?
助けてください
sql - 隠しストアド プロシージャの使用
次のストアド プロシージャを使用して、サーバーからデータベースを取得しようとしています。ただし、1 か月前から作成されたデータベースが必要です。これを機能させるにはどうすればよいですか?
コードは次のとおりです。
特定の月に作成された、Z で始まるデータベースが必要です。
sql - ログファイルのサイズを一時テーブルに保存したい
何が悪いのですか
insert into #tempA(MailSize)
EXEC sp_foreachdb_dev @command = N' USE ?
SELECT (size * 8)/1024.0 AS size_in_mb FROM
sys.database_files WHERE
data_space_id = 0',
@user_only = '1'
select * from #tempA
ログファイルのサイズを一時テーブルに保存したい
sql-server - 予期しない sp_MSForEachDB の動作
私はいくつかのシステム sproc の理解を深めるために取り組んでいますが、私が取り組んでいたこのスクリプトに非常に混乱しています。理解を深めるためsp_MSForEachDB
に、サーバー上のすべてのデータベースのログを切り捨てるスクリプトを作成することにしました。そのため、次のスクリプトを思いつきました。
これにより、データベースのログが正常に切り捨てられることがあります。データベースでは失敗します (エラー メッセージは表示されず、切り捨てられていないログ ファイルが残るだけです)、一貫して/再現可能に失敗します。
ただし、printステートメントでは、印刷すると予想されるものを正確に印刷します。ただし、データベースごとにこのスクリプトの機能部分を手動で入力すると、次のようになります。
それは常に100%機能します。
sp_MSForEachDB
「ループ」が期待どおりに機能しないのはなぜですか? 私は何が欠けていますか?
sql-server - 複数のデータベースに対して実行されたクエリの結果を返すテーブル値関数またはビューを作成する方法
データベースの動的リスト(テーブルに格納されている)に対して実行されたクエリから1つの結果セットを返すビューまたはテーブル値関数を作成する必要があります。すべてのデータベースの構造は同じであり、view / tvfには、databases_table内の各データベースのすべてのクエリの和集合に相当するものが含まれている必要があります。これらすべての全体像は、このクエリの結果をODBC経由で利用できるようにする必要があるということです。
オンラインで多くのことを調べた後、私はいくつかの潜在的な解決策を思いつきましたが、私が達成しようとしていることに完全に適合するものはありません。
私が最初に調べたのは、個別のデータベースごとに選択されたビューがあり、すべてが結合されていることでした。これは、私が想像できる限り保守可能とはほど遠いという事実を除いて、完全に機能しました。これらの種類のマルチデータベースクエリは25〜100個あり、それらはすべて、絶えず変化するデータベースのセットに対して実行する必要があります。
私はまだこの方法を使用することを検討しており、ビューを動的に作成するためのストアドプロシージャを作成していますが、このプロセス全体をハンズフリーにするように求められているため、これはまだあまり役に立ちません。この方法で行うには、ODBCを介してビューに接続する前に、誰かがビューの更新をトリガーする必要があります。なるべく避けたいと思います。
私が調べた2番目のことは、私が必要なものにかなり近づいたことです。sp_msforeachdbストアドプロシージャを使用し、データベースがリストにあるかどうかを確認し、リストにある場合は、クエリの結果をテーブル変数に追加しました。これは問題なく機能しますが、問題は、動的SQLにより、テーブル値の関数またはビューにラップすることが不可能になることでした...
これは、ms ssmsからのクエリから実行すると完全に機能しますが、私が言ったように、veiwまたはtvfに配置することは私の能力を超えていることが証明されています。私の知る限り、動的SQLはtvfの使用を排除し、ビューは変数を操作できません。
上記のコードの結果をODBC経由で利用できるようにする方法はありますか?私が見逃している代替ソリューションはありますか?
sql - SQL は、DB 内の特定のテーブルのテーブル行数を取得します
すべての DB を反復処理して、各従業員テーブルの行数を取得するにはどうすればよいですか? 各クライアントには独自の DB があり、各 DB で全従業員を見つける必要があります。
sp_MSforeachdbの使用方法を理解しようとしている
別々のテーブルに出力することも、DB 名を持つ 1 つのテーブルに出力することもできます。
c# - Sp_msforeachtable C# で最初のテーブルだけを返す
sp_msforeachtable.i を使用してデータベースのテーブルを一覧表示したい SSMS ではうまくいきましたが (sp_list2 ストアド プロシージャで記述しました)、このストアド プロシージャを C# で使用したい場合、データベースの最初のテーブルがリスト ボックスに返されます。
C# のコード:
私のストアドプロシージャ: