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