Подтвердить что ты не робот

Список всех источников данных и их зависимостей (отчетов, элементов и т.д.) В SQL Server 2008 R2

Я новичок в SQL Server, и мне очень жаль, если есть очевидное решение моего вопроса, но я не могу найти его.

Я ищу для создания отчета (или списка) всех источников данных и их отдельных зависимостей на сервере SQL Server 2008 R2 (сервер отчетов).

Я знаю, что я могу получить доступ к каждому отдельному источнику данных, чтобы получить список всех элементов, которые зависят от него. Я делал это в прошлом, но это занимает много времени.

Есть ли способ получить отчет, в котором будут отображаться все источники данных и их зависимые элементы?

Спасибо заранее,

Марван

4b9b3361

Ответ 1

Следующее (которое было изменено из того, что beargle опубликовано ранее) делает то, что я искал. Это будет отображать все источники данных по их фактическому имени и всем их зависимым элементам:

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;

Ответ 2

Этот запрос должен быть запущен в базе 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;

Страница зависимых элементов в диспетчере отчетов выполняет хранимую процедуру dbo.FindItemsByDataSource, предоставляя следующие параметры: ItemID = <data source item ID> и AuthType = 1. Вышеприведенный запрос представляет собой взломанную версию запроса, используемого этой хранимой процедурой, для удаления идентификатора источника данных. Это позволяет возвращать зависимые элементы для всех источников данных. Я удалил сами источники данных из результатов с помощью DS.Name IS NOT NULL

Ответ 3

Вы также можете использовать 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
            }
        }
    }
}