20

'daki tüm Veri Kaynakları ve Bağımlılıkları (raporlar, öğeler, vb.) Listeleme SQL Server'da yeniyim ve sorduğum sorunun belirgin bir çözümü varsa üzgünüm, ancak bulamıyorum. o.SQL Server 2008 R2

SQL Server 2008 R2'deki (raporlama sunucusu) tüm veri kaynaklarının ve bunların bireysel bağımlılıklarının bir raporunu (veya listesini) oluşturmaya çalışıyorum.

Her bir veri kaynağına, ona bağlı olan tüm öğelerin listesini almak için erişebileceğimi biliyorum. Bunu geçmişte yaptım ama zaman alıcı.

Tüm veri kaynaklarını ve bağımlı öğelerini görüntüleyecek bir rapor almanın bir yolu var mı? peşin

sayesinde

Marwan

+0

bir bağımlı öğesi olarak ne sınıflandırırsınız? Sadece modeller, veri kümeleri ve raporlar veya başkaları var mı? – Bryan

+2

@beargle - Veri kaynağını kullanan herhangi bir rapor olarak bağımlı bir öğe tanımlardım. Şu anda, her veri kaynağının kendi menüsünde "Bağımlı Öğeleri Görüntüle" vardır. Yani bu listede yer alacak herhangi bir şey bağımlı bir öğe olarak nitelendirilecek. Umarım bu soru/talebi açıklığa kavuşturmaya yardımcı olur. Teşekkürler. –

cevap

22

ile sonuçlarından veri kaynaklarından kendilerini kaldırıldı.

SELECT 
    C2.Name AS Data_Source_Name, 
    C.Name AS Dependent_Item_Name, 
    C.Path AS Dependent_Item_Path 
FROM 
    ReportServer.dbo.DataSource AS DS 
     INNER JOIN 
    ReportServer.dbo.Catalog AS C 
     ON 
      DS.ItemID = C.ItemID 
       AND 
      DS.Link IN (SELECT ItemID FROM ReportServer.dbo.Catalog 
         WHERE Type = 5) --Type 5 identifies data sources 
     FULL OUTER JOIN 
    ReportServer.dbo.Catalog C2 
     ON 
      DS.Link = C2.ItemID 
WHERE 
    C2.Type = 5 
ORDER BY 
    C2.Name ASC, 
    C.Name ASC; 
+0

@beargle - Bunu anlamaya yardım ettiğin için teşekkürler (^_^) –

+0

İlk denemede çalıştı. Mükemmel cevap. Tek yapmam gereken veritabanı adını değiştirmek. –

+0

Sorgunuz için teşekkürler ... –

8

Bu sorgu bu parametreleri temin, ReportServer veritabanı

SELECT 
    DS.Name AS DatasourceName, 
    C.Name AS DependentItemName, 
    C.Path AS DependentItemPath 
FROM 
    ReportServer.dbo.Catalog AS C 
     INNER JOIN 
    ReportServer.dbo.Users AS CU 
     ON C.CreatedByID = CU.UserID 
     INNER JOIN 
    ReportServer.dbo.Users AS MU 
     ON C.ModifiedByID = MU.UserID 
     LEFT OUTER JOIN 
    ReportServer.dbo.SecData AS SD 
     ON C.PolicyID = SD.PolicyID AND SD.AuthType = 1 
     INNER JOIN 
    ReportServer.dbo.DataSource AS DS 
     ON C.ItemID = DS.ItemID 
WHERE 
    DS.Name IS NOT NULL 
ORDER BY 
    DS.Name; 

Rapor Yöneticisi'nde bağımlı öğeleri sayfası dbo.FindItemsByDataSource saklı yordamı çalıştırır karşı çalıştırılması gerekir: ItemID = <data source item ID> ve AuthType = 1. Yukarıdaki sorgu, veri kaynağına özel kimliğini kaldırmak için bu saklı yordam tarafından kullanılan sorgunun saldırıya uğramış bir sürümüdür. Bu, tüm veri kaynakları için bağımlı öğelerin döndürülmesine izin verir. Ben ( beargle daha önce yayınlanan şeyden modifiye edilmiş) Ben aradığı şeyi yapar aşağıdaki DS.Name IS NOT NULL

+0

Bu harika görünüyor. Umarım burada cahilce ses çıkarmıyorum, ama bunu nasıl çalıştırırım? Şimdiye kadarki deneyimim sunucuda SSRS'yi kurmak ve çalıştırmak olmuştur. Sorgunuzu nasıl çalıştıracağımı bilmiyorum. Şimdiden teşekkürler. –

+0

Yukarıdaki sorguyu, normal bir rapor projesinin parçasıymış gibi ele alın; Veri kaynağını tanımlayın, veri kümesini oluşturmak için bu sorguyu kullanın, ardından alanları raporunuza ekleyin. Alternatif olarak, doğrudan SQL Server Management Studio'yu, Visual Studio'yu veya başka bir aracı kullanarak 'ReportServer' veritabanına karşı çalıştırın. – Bryan

+0

Çok teşekkür ederim ** beargle **, sorgunuz mükemmel çalıştı. Ayrıntıları ve bunun nasıl çalıştırılacağını açıklamak için zaman ayırdığınız için de teşekkür ederiz. Son derece yararlı. Tekrar teşekkürler. –

4

Ayrıca kullanmayı düşünebilirsiniz Powershell: Bu gerçek adıyla tüm veri kaynaklarını ve tüm bunların bağımlı öğeleri listeler

#************************************************************************************************************************************ 
# FileName:  Delete-DataSources.ps1 
# Date:   2015/04/23 
# Author:  Hugh Scott 
# 
# Description: 
# This script finds data sources with no dependencies in SSRS and removes them. 
# 
# Parameters: 
# $serverBase  - base URL for the server to check (ie, myserver.mydomain.com) 
# [$WhatIf]  - Option wwitch parameter to prevent actual deleting of objects (will list out reports that need to be deleted) 
#*********************************************************************************************************************************** 
[CmdletBinding()] 
Param(
    [Parameter(Mandatory=$true,Position=0)] 
    [string]$serverBase, 
    [Parameter(Mandatory=$false,Position=1)] 
    [switch]$WhatIf 
) 

$url = "http://$serverBase/reportserver/ReportService2010.asmx?WSDL" 
$ssrs = New-WebServiceProxy -uri $url -UseDefaultCredential -Namespace "ReportingWebService" 

$outFile = ".\DeleteItems_$serverBase.txt" 

# Connection to Web Service, grab all data sources 
$items = $ssrs.ListChildren("/", $true) | where-object {$_.typename -eq "DataSource"} 
foreach($item in $items) { 

    $dependencies = $ssrs.ListDependentItems($item.Path) 
    $dependentReports = $dependencies.Count 

    if($dependencies.Count -eq 0){ 
     [string]$itemName = $item.Path 
     if($WhatIf){ 

      Write-Host "Item $itemName would be deleted." 
      Add-Content $outFile "Item $itemName would be deleted." 
     } else { 
      try { 
       $ssrs.DeleteItem($item.Path) 
       Write-Host "Item $itemName deleted." 
       Add-Content $outFile "Deleted item $itemName ." 
      } catch [System.Exception] { 
       $Msg = $_.Exception.Message 
       Write-Host $itemName $Msg 
       Add-Content $itemName $msg 
      } 
     } 
    } 
}