Перечисление всех источников данных и их зависимостей (отчетов, элементов и т. Д.) В SQL Server 2008 R2 - PullRequest
22 голосов
/ 09 марта 2012

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

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

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

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

Заранее спасибо,

Марван

Ответы [ 3 ]

30 голосов
/ 19 марта 2012

Следующее (которое было изменено по сравнению с тем, что 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;
9 голосов
/ 09 марта 2012

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

4 голосов
/ 23 апреля 2015

Вы также можете рассмотреть возможность использования 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
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...