0
저는 SQL Server 2014 및 Microsoft의 Report Server 데이터베이스에서 작업하고 있습니다. 이 bug 때문에 구독 우선 순위를 끌어 올 스크립트를 만드는 작업을했습니다.ReportServerXML에서 구독 우선 순위를 추출하려면 어떻게해야합니까?
SQL, XQuery 및 XPath를 사용하여 다음 쿼리를 작성했습니다.
;WITH XMLNAMESPACES (DEFAULT 'http://schemas.microsoft.com/sqlserver/reporting/2010/01/reportdefinition','http://schemas.microsoft.com/SQLServer/reporting/reportdesigner' AS rd)
,s
as (SELECT
s.Report_OID
,s.SubscriptionID
,s.OwnerID
,s.Description
,s.LastStatus
,s.EventType
,CONVERT(XML,CONVERT(VARCHAR(MAX),s.ExtensionSettings)) AS reportXML
FROM ReportServer.dbo.Subscriptions as s
WHERE s.ExtensionSettings is not null
)
--SELECT s.reportxml.value('/ParameterValues[1]','varchar(150)') FROM s
SELECT
con.Report_OID
,con.test
FROM (SELECT
s.Report_OID
,dsn.value('Name[1]','varchar(150)') as test
FROM s
cross apply reportxml.nodes('/ParameterValues/ParameterValue') as r(dsn)
) con
다음 두 개의 예제 XML 문서도 붙여 넣습니다.
<ParameterValues>
<ParameterValue>
<Name>FILENAME</Name>
<Field>subscriber_domestic_id</Field>
</ParameterValue>
<ParameterValue>
<Name>PATH</Name>
<Field>folder</Field>
</ParameterValue>
<ParameterValue>
<Name>RENDER_FORMAT</Name>
<Value>PDF</Value>
</ParameterValue>
<ParameterValue>
<Name>WRITEMODE</Name>
<Value>OverWrite</Value>
</ParameterValue>
<ParameterValue>
<Name>FILEEXTN</Name>
<Value>True</Value>
</ParameterValue>
<ParameterValue>
<Name>USERNAME</Name>
<Field>login</Field>
</ParameterValue>
<ParameterValue>
<Name>PASSWORD</Name>
<Field>mypasswordstackOF</Field>
</ParameterValue>
</ParameterValues>
The second document here.
<ParameterValues>
<ParameterValue>
<Name>TO</Name>
<Value>[email protected];[email protected];[email protected]</Value>
</ParameterValue>
<ParameterValue>
<Name>CC</Name>
<Value>[email protected];[email protected];</Value>
</ParameterValue>
<ParameterValue>
<Name>IncludeReport</Name>
<Value>True</Value>
</ParameterValue>
<ParameterValue>
<Name>RenderFormat</Name>
<Value>PDF</Value>
</ParameterValue>
<ParameterValue>
<Name>Subject</Name>
<Value>@ReportName was executed at @ExecutionTime</Value>
</ParameterValue>
<ParameterValue>
<Name>IncludeLink</Name>
<Value>True</Value>
</ParameterValue>
<ParameterValue>
<Name>Priority</Name>
<Value>NORMAL</Value>
</ParameterValue>
</ParameterValues>
모든 문서가 우선 순위가있는 것은 아닙니다. 내 현재 쿼리는 오류가 발생하지 않지만 아무 것도 반환하지 않습니다. 나는 nodes() 함수를 올바르게 사용하고 있다고 생각한다. 이 문제에 올바르게 접근하는 방법에 대한 아이디어가 있습니까? 미래의 목적을 위해
실외에서 시도 했습니까? –
예 Report_OID는 문제가 없지만 test 열에 대해서는 null입니다. – user6780741
이 네임 스페이스가 필요합니까? XML에 네임 스페이스가 지정되어 있지 않습니다. 'WITH s as (SELECT ...)'만 시도하십시오 –