0

私はまったく新しいジュニア SQL 開発者です。Report Manager にあるいくつかのレポートを継承しました。サブスクリプションが設定されているように見えるものもありますが、無効な電子メール アドレスが含まれています。

これらの各レポートとそのサブスクリプションは、レポート マネージャーでレポートをクリックし、[管理]、[サブスクリプション] などに移動して、一度に 1 つずつ変更できることを理解しています。ただし、これは時間と労力の膨大な無駄のように思われ、将来に向けて非常に堅実なソリューションを提供するものではありません。

もっと理にかなっている何かに時間を費やしたいと思います。SSMS からすべての Report Manager レポート サブスクリプションにアクセスする方法はありますか? 現在ハードコードされている電子メール アドレスを確認し、人事データベース内の従業員の電子メール リストから選択するようにそれを変更できるようにしたいと考えています。そうすれば、後でメールが変更された場合、またはすべてのサブスクリプションから 1 人を削除したい場合でも、それほど時間はかかりません。

また、Report Manager に付属しているように見えるばかげたジョブ命名規則を回避する方法を知っている人はいますか? "3AC1BB6F-D782-46DD-99F5-CCA1E6257091" がどのレポートに関連付けられているかはわかりませんが、"ReportName+Microsoft'sTypicalBSNamingCovention" のようなデフォルトに変更できる場合は、それで問題ありません。検出。

それが理にかなっていることを願っています。あなたの経験と知識を私と共有してくれてありがとう。:^)

4

1 に答える 1

3

もちろん、レポート サーバー データベースの場所がわかっていると仮定して、サブスクリプションを表示できるクエリを次に示します。

SELECT A.SubscriptionID, A.Report_OID, B.Name, 
Path, A.LastRunTime, A.Description, C.UserName AS Owner, A.LastStatus, A.ExtensionSettings
FROM Subscriptions A INNER JOIN Catalog B
ON A.Report_OID = B.ItemID
INNER JOIN Users C
ON A.OwnerID = C.UserID
WHERE A.ExtensionSettings LIKE '%name@domain.com%' -- this can be more than an email, like a paramater value
ORDER BY A.LastRunTime DESC

これは、サブスクリプションを更新するために使用できるクエリです。

UPDATE Subscriptions SET
ExtensionSettings = REPLACE(CAST(ExtensionSettings AS nvarchar(max)), 'name', 'new_name')
WHERE ExtensionSettings LIKE '%name@domain.com%'

更新プログラムは慎重に使用してください。そうしないと、手動でサブスクリプションを再構築することになる可能性があります。

Report Manager によって作成されたサブスクリプション ジョブをいじらないでください。特定のサブスクリプションのジョブを見つける必要がある場合は、各サブスクリプションにある程度固有のスケジュールがあることを確認してください。ジョブ リストを最終実行日で並べ替えて、サブスクリプションが最後に起動された日付を見つけます。右クリックして実行します。とにかく、それは私にとって十分に機能します。

于 2016-06-10T15:33:02.797 に答える