web-dev-qa-db-fra.com

Liste de toutes les sources de données et de leurs dépendances (rapports, éléments, etc.) dans SQL Server 2008 R2

Je suis nouveau sur SQL Server et je suis désolé s'il existe une solution évidente à ma question, mais je n'arrive pas à la trouver.

Je cherche à générer un rapport (ou une liste) de toutes les sources de données et leurs dépendances individuelles sur un serveur SQL Server 2008 R2 (serveur de rapports).

Je sais que je peux accéder à chaque source de données individuelle pour obtenir une liste de tous les éléments qui en dépendent. Je l'ai fait dans le passé, mais cela prend du temps.

Existe-t-il un moyen d'obtenir un rapport qui afficherait toutes les sources de données et leurs éléments dépendants?

Merci d'avance,

Marwan

25

Ce qui suit (qui a été modifié à partir de ce que beargle posté plus tôt) fait ce que je cherchais. Cela répertoriera toutes les sources de données par leur nom réel et tous leurs éléments dépendants:

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;
32
Marwan مروان

Cette requête doit être exécutée sur la base de données ReportServer

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;

La page des éléments dépendants dans Report Manager exécute le dbo.FindItemsByDataSource procédure stockée, fournissant ces paramètres: ItemID = <data source item ID> et AuthType = 1. La requête ci-dessus est une version piratée de la requête utilisée par cette procédure stockée pour supprimer l'ID spécifique de la source de données. Cela permet de renvoyer les éléments dépendants pour toutes les sources de données. J'ai supprimé les sources de données elles-mêmes des résultats avec DS.Name IS NOT NULL

9
Bryan

Vous pouvez également envisager d'utiliser Powershell:

    #************************************************************************************************************************************
# 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
            }
        }
    }
}
4
hmscott