20

Tôi mới sử dụng SQL Server, và tôi xin lỗi nếu có một giải pháp rõ ràng cho câu hỏi của tôi. nó.Liệt kê tất cả các nguồn dữ liệu và các phụ thuộc của chúng (các báo cáo, mục, vv) trong SQL Server 2008 R2

Tôi đang tìm cách tạo báo cáo (hoặc danh sách) của tất cả các nguồn dữ liệu và phụ thuộc riêng của chúng trên SQL Server 2008 R2 (máy chủ báo cáo).

Tôi biết rằng tôi có thể truy cập từng nguồn dữ liệu riêng lẻ để nhận danh sách tất cả các mục phụ thuộc vào nó. Tôi đã làm điều này trong quá khứ nhưng nó là tốn thời gian.

Có cách nào để nhận báo cáo hiển thị tất cả các nguồn dữ liệu và các mục phụ thuộc của chúng không?

Cảm ơn trước,

Marwan

+0

bạn sẽ phân loại gì như là một mục phụ thuộc? Chỉ các mô hình, tập hợp dữ liệu và báo cáo mới có những người khác? – Bryan

+2

@ beargle - Tôi sẽ xác định một mục phụ thuộc như bất kỳ báo cáo nào sử dụng nguồn dữ liệu. Hiện tại, mỗi nguồn dữ liệu có "Xem các mục phụ thuộc" trong trình đơn của nó. Vì vậy, bất cứ điều gì sẽ được liệt kê trong đó sẽ đủ điều kiện như là một mục phụ thuộc. Tôi hy vọng rằng sẽ giúp làm rõ câu hỏi/yêu cầu của tôi. Cảm ơn. –

Trả lời

22

Thông tin sau (được sửa đổi từ những gì beargle đã đăng trước đó) làm những gì tôi đang tìm kiếm. Điều này sẽ liệt kê tất cả các nguồn dữ liệu theo tên thực tế của họ, và tất cả các mặt hàng phụ thuộc của họ:

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 - Cảm ơn bạn đã giúp tôi tìm ra điều này (^_^) –

+0

Đã làm việc trong lần thử đầu tiên. Câu trả lời tuyệt vời. Tất cả những gì tôi phải làm là thay đổi tên cơ sở dữ liệu. –

+0

Cảm ơn bạn đã truy vấn ... –

8

truy vấn này nên được chạy chống lại cơ sở dữ liệu 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; 

Các trang mục phụ thuộc tại tờ trình quản lý thực hiện các thủ tục lưu trữ dbo.FindItemsByDataSource, cung cấp các thông số: ItemID = <data source item ID>AuthType = 1. Truy vấn trên là phiên bản bị tấn công của truy vấn được sử dụng bởi quy trình được lưu trữ này để xóa ID cụ thể của nguồn dữ liệu. Điều này cho phép các mục phụ thuộc được trả về cho tất cả các nguồn dữ liệu. Tôi đã tự xóa nguồn dữ liệu khỏi kết quả bằng DS.Name IS NOT NULL

+0

Điều này có vẻ tuyệt vời. Tôi hy vọng tôi không nghe có vẻ ngu dốt ở đây, nhưng làm thế nào để tôi chạy điều này. Kinh nghiệm của tôi cho đến nay đã được xây dựng và chạy SSRS trên máy chủ. Tôi không chắc chắn cách chạy truy vấn của bạn. Cảm ơn trước. –

+0

Xử lý truy vấn ở trên như thể nó là một phần của dự án báo cáo bình thường; Xác định nguồn dữ liệu, sử dụng truy vấn này để xây dựng tập dữ liệu, sau đó thêm các trường vào báo cáo của bạn. Ngoài ra, hãy chạy nó trực tiếp với cơ sở dữ liệu 'ReportServer' bằng cách sử dụng SQL Server Management Studio, Visual Studio hoặc một số công cụ khác. – Bryan

+0

Cảm ơn bạn rất nhiều ** gấu **, truy vấn của bạn hoạt động hoàn hảo. Cảm ơn bạn cũng đã dành thời gian để giải thích chi tiết về nó và làm thế nào để chạy nó. Vô cùng hữu ích. Cảm ơn một lần nữa. –

4

Bạn cũng có thể xem xét sử dụng 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 
      } 
     } 
    } 
} 
Các vấn đề liên quan