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
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;
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
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
}
}
}
}