Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
Home
Discussion Groups
DB Engine
SQL ServerMSDESQL Server CE
Services
Analysis (Data Mining)Analysis (OLAP)DTSIntegration ServicesNotification ServicesReporting Services
Programming
CLRConnectivitySQLXML
Other Technologies
ClusteringEnglish QueryFull-Text SearchReplicationService Broker
General
Data WarehousingPerformanceSecuritySetupSQL Server ToolsOther SQL Server Topics
DirectoryUser Groups
Related Topics
MS AccessOther DB ProductsMS Server Products.NET DevelopmentVB DevelopmentJava DevelopmentMore Topics ...

SQL Server Forum / Programming / XML / July 2008

Tip: Looking for answers? Try searching our database.

newbie to xpath/xquery trying to pull email address out of xml in     SSRS subscription table

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
kent.eilers@res-direct.com - 03 Jul 2008 21:11 GMT
i'm trying to pull out email addresses info from the SSRS subscription
table.  The xml looks like this:

<ParameterValues>
    <ParameterValue>
        <Name>TO</Name>
        <Value>pep1@myemail.com;pep2@myemail.com</Value>
    </ParameterValue>
    <ParameterValue>
        <Name>BCC</Name>
        <Value>pep3@myemail.com;pep4@myemail.com</Value>
    </ParameterValue>
    <ParameterValue>
        <Name>ReplyTo</Name>
        <Value>pep5@myemail.com;pep6@myemail.com</Value>
    </ParameterValue>
    <ParameterValue>
        <Name>IncludeReport</Name>
        <Value>True</Value></ParameterValue>
    <ParameterValue>
        <Name>RenderFormat</Name>
        <Value>EXCEL</Value>
    </ParameterValue>
    <ParameterValue>
        <Name>Subject</Name>
        <Value>@ReportName was executed at @ExecutionTime</Value>
    </ParameterValue>
    <ParameterValue>
        <Name>Priority</Name>
        <Value>NORMAL</Value>
    </ParameterValue></ParameterValues>
</ParameterValues>

I have not been able to figure out the correct syntax with xpath or
xquery...my logic is as follows:

pull the 'value' data when it's sibling <Name> value = "TO"

I've done the following:

SELECT SubscriptionID, extensionSettings,
CAST(extensionSettings AS XML).value('(//ParameterValue/Value)[1]',
'varchar(max)') AS col1,
CAST(extensionSettings AS XML).value('(//ParameterValue/Value)[2]',
'varchar(max)') AS col2,
CAST(extensionSettings AS XML).value('(//ParameterValue/Value)[3]',
'varchar(max)') AS col3
from Subscriptions

which gets me the To, CC, & BCC data into output columns 1,2,3.  but I
cannot assume the 2nd value is always of 'CC' type...

I've also tried:
SELECT CAST(extensionSettings AS XML).value('(//ParameterValue[Name
="TO"]/Value)','varchar(max)') AS col1
from Subscriptions

but this generates an error about " 'value()' requires a
singleton...."

anyone provide an example of how to accomplish this?

thanks.
Bob - 03 Jul 2008 22:43 GMT
Try this:

DECLARE @subscriptions TABLE ( SubscriptionID INT IDENTITY PRIMARY KEY,
extensionSettings XML )

DECLARE @xml XML

INSERT INTO @subscriptions VALUES ( '
<ParameterValues>
    <ParameterValue>
        <Name>TO</Name>
        <Value>pep1@myemail.com;pep2@myemail.com</Value>
    </ParameterValue>
    <ParameterValue>
        <Name>BCC</Name>
        <Value>pep3@myemail.com;pep4@myemail.com</Value>
    </ParameterValue>
    <ParameterValue>
        <Name>ReplyTo</Name>
        <Value>pep5@myemail.com;pep6@myemail.com</Value>
    </ParameterValue>
    <ParameterValue>
        <Name>IncludeReport</Name>
        <Value>True</Value></ParameterValue>
    <ParameterValue>
        <Name>RenderFormat</Name>
        <Value>EXCEL</Value>
    </ParameterValue>
    <ParameterValue>
        <Name>Subject</Name>
        <Value>@ReportName was executed at @ExecutionTime</Value>
    </ParameterValue>
    <ParameterValue>
        <Name>Priority</Name>
        <Value>NORMAL</Value>
    </ParameterValue>
</ParameterValues>' )

-- pull the 'value' data when it's sibling <Name> value = "TO"
SELECT
    --c.d.value('local-name', 'VARCHAR(30)'),
    e.a.value('.', 'VARCHAR(30)') x,
    -- OR
    e.a.value('(text())[1]', 'VARCHAR(30)') y

FROM @subscriptions
CROSS APPLY extensionSettings.nodes('//ParameterValue[Name = "TO" or Name =
"BCC" or Name = "ReplyTo"]/Value') e(a)

HTH
wBob

> i'm trying to pull out email addresses info from the SSRS subscription
> table.  The xml looks like this:
[quoted text clipped - 59 lines]
>
> thanks.
Bob - 03 Jul 2008 23:53 GMT
And shred it.  And use a longer VARCHAR ...

DECLARE @subscriptions TABLE ( SubscriptionID INT IDENTITY PRIMARY KEY,
extensionSettings XML )

DECLARE @xml XML

INSERT INTO @subscriptions VALUES ( '
<ParameterValues>
    <ParameterValue>
        <Name>TO</Name>
        <Value>pep1@myemail.com;pep2@myemail.com</Value>
    </ParameterValue>
    <ParameterValue>
        <Name>BCC</Name>
        <Value>pep3@myemail.com;pep4@myemail.com</Value>
    </ParameterValue>
    <ParameterValue>
        <Name>ReplyTo</Name>
        <Value>pep5@myemail.com;pep6@myemail.com</Value>
    </ParameterValue>
    <ParameterValue>
        <Name>IncludeReport</Name>
        <Value>True</Value></ParameterValue>
    <ParameterValue>
        <Name>RenderFormat</Name>
        <Value>EXCEL</Value>
    </ParameterValue>
    <ParameterValue>
        <Name>Subject</Name>
        <Value>@ReportName was executed at @ExecutionTime</Value>
    </ParameterValue>
    <ParameterValue>
        <Name>Priority</Name>
        <Value>NORMAL</Value>
    </ParameterValue>
</ParameterValues>' )

SELECT e.a.value('(Value/text())[1]', 'VARCHAR(50)') y
FROM @subscriptions
CROSS APPLY extensionSettings.nodes('//ParameterValue[Name = "TO" or Name =
"BCC" or Name = "ReplyTo"]') e(a)

DECLARE @emails TABLE ( email XML )

INSERT INTO @emails ( email )
SELECT '<email>' + REPLACE( y, ';', '</email><email>' )   + '</email>' email
FROM
    (
    SELECT
        e.a.value('(Value/text())[1]', 'VARCHAR(50)') y
    FROM @subscriptions
    CROSS APPLY extensionSettings.nodes('//ParameterValue[Name = "TO" or Name =
"BCC" or Name = "ReplyTo"]') e(a)
    ) x

-- And shred it
SELECT x.y.value('.', 'VARCHAR(50)')
FROM @emails
CROSS APPLY email.nodes('email') x(y)

> Try this:
>
[quoted text clipped - 111 lines]
> >
> > thanks.
kent.eilers@res-direct.com - 07 Jul 2008 13:57 GMT
> And shred it.  And use a longer VARCHAR ...
>
[quoted text clipped - 174 lines]
>
> > > thanks.

wow - it works too!

very nice...i'll have to look at this carefully..

Thanks !
kent.eilers@res-direct.com - 08 Jul 2008 21:02 GMT
On Jul 7, 7:57 am, kent.eil...@res-direct.com wrote:

> > And shred it.  And use a longer VARCHAR ...
>
[quoted text clipped - 180 lines]
>
> Thanks !

btw..do you know where any documentation on the
extensionSettings.nodes function is?

thanks.
Michael Coles - 10 Jul 2008 03:16 GMT
http://msdn.microsoft.com/en-us/library/ms188282.aspx

Signature

========
Michael Coles
"Pro SQL Server 2008 XML"
http://www.amazon.com/Pro-SQL-Server-2008-XML/dp/1590599837/

On Jul 7, 7:57 am, kent.eil...@res-direct.com wrote:
> On Jul 3, 5:53 pm, Bob <B...@discussions.microsoft.com> wrote:
>
[quoted text clipped - 189 lines]
>
> Thanks !

btw..do you know where any documentation on the
extensionSettings.nodes function is?

thanks.
kent.eilers@res-direct.com - 08 Jul 2008 14:02 GMT
> And shred it.  And use a longer VARCHAR ...
>
[quoted text clipped - 174 lines]
>
> > > thanks.

Bob - where is the  "extensionSettings.nodes" function documented?

Thanks
Bob - 08 Jul 2008 14:56 GMT
New in SQL2005, the xml datatype has methods you can use against it.  Start
in Books Online (BOL) here:

XQuery Against the xml Data Type

> > And shred it.  And use a longer VARCHAR ...
> >
[quoted text clipped - 178 lines]
>
> Thanks
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.