Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 помогите новичку сконвертировать запрос в один select  [new]
PaulD_
Member

Откуда:
Сообщений: 20
есть рабочий запрос

Use OperationsManager;
declare @xml xml;
Set @xml = (select MPXML from ManagementPack where MPName = 'Microsoft.SystemCenter.Notifications.Internal');
select 'To' as [ToCc],t.rows.value('data(.)', 'varchar(50)') as Email
from @xml.nodes('//ManagementPack/TypeDefinitions/ModuleTypes
                 /ConditionDetectionModuleType[@ID="Microsoft.SystemCenter.Notification.Recipients"]
                 /ModuleImplementation/Composite/MemberModules
                 /ConditionDetection[@ID="RecipientResolver"]/RecipientDirectory
                 /Recipient[Name="User1"]
                 /Devices/Device[Protocol="Smtp"]/Address') as t(rows)
union all
select 'Cc',t.rows.value('data(.)', 'varchar(50)')
from @xml.nodes('//ManagementPack/TypeDefinitions/ModuleTypes
                 /ConditionDetectionModuleType[@ID="Microsoft.SystemCenter.Notification.Recipients"]
                 /ModuleImplementation/Composite/MemberModules
                 /ConditionDetection[@ID="RecipientResolver"]/RecipientDirectory
                 /Recipient[Name="User2"]
                 /Devices/Device[Protocol="Smtp"]/Address') as t(rows)

помогите убрать declare и set, так чтобы всё было в одном запросе
11 сен 09, 14:45    [7647992]     Ответить | Цитировать Сообщить модератору
 Re: помогите новичку сконвертировать запрос в один select  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
declare @t table(id int, x xml)
insert into @t(id, x)
select 1, '<root><row item="11"/><row item="12"/></root>' union all
select 2, '<root><row item="21"/><row item="22"/></root>'

;with cte as (
   select x from @t where id = 1
)
select t.item
  from cte
  cross apply (select row.value('@item[1]', 'int') as item
                 from x.nodes('/root/row') as t(row) ) as t

item
-----------
11
12

(2 row(s) affected)
11 сен 09, 14:55    [7648081]     Ответить | Цитировать Сообщить модератору
 Re: помогите новичку сконвертировать запрос в один select  [new]
SHKoder
Member

Откуда: Moscow city
Сообщений: 616
select
'To' as [ToCc],
t.rows.value('data(.)', 'varchar(50)') as Email
into TMPTABLE
from @xml.nodes('//Manage...
11 сен 09, 14:55    [7648084]     Ответить | Цитировать Сообщить модератору
 Re: помогите новичку сконвертировать запрос в один select  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

так как-то:
;with tt as
(select MPXML from ManagementPack where MPName = 'Microsoft.SystemCenter.Notifications.Internal')
select 'To' as [ToCc],t.rows.value('data(.)', 'varchar(50)') as Email
from tt
   cross apply tt.MPXML.nodes('//ManagementPack/TypeDefinitions/ModuleTypes
                  /ConditionDetectionModuleType[@ID="Microsoft.SystemCenter.Notification.Recipients"]
                  /ModuleImplementation/Composite/MemberModules
                  /ConditionDetection[@ID="RecipientResolver"]/RecipientDirectory
                  /Recipient[Name="User1"]
                  /Devices/Device[Protocol="Smtp"]/Address') as t(rows)
union all
select 'Cc',t.rows.value('data(.)', 'varchar(50)')
from tt
   cross apply tt.MPXML.nodes('//ManagementPack/TypeDefinitions/ModuleTypes
                  /ConditionDetectionModuleType[@ID="Microsoft.SystemCenter.Notification.Recipients"]
                  /ModuleImplementation/Composite/MemberModules
                  /ConditionDetection[@ID="RecipientResolver"]/RecipientDirectory
                  /Recipient[Name="User2"]
                  /Devices/Device[Protocol="Smtp"]/Address') as t(rows)


Posted via ActualForum NNTP Server 1.4

11 сен 09, 14:56    [7648098]     Ответить | Цитировать Сообщить модератору
 Re: помогите новичку сконвертировать запрос в один select  [new]
PaulD_
Member

Откуда:
Сообщений: 20
забыл указать, что MPXML типа nvchar(max). поэтому это свистопляска с declare.

daw, на ваш запрос ругается
"The XMLDT method 'nodes' can only be invoked on columns of type xml."

SHKoder, не хотелось бы использовать temptable

Паганель, у вас тоже есть declare, а я хочу без них совсем
11 сен 09, 15:04    [7648158]     Ответить | Цитировать Сообщить модератору
 Re: помогите новичку сконвертировать запрос в один select  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> daw, на ваш запрос ругается
> "The XMLDT method 'nodes' can only be invoked on columns of type xml."

ну так, сконвертите, делов-то:
;with tt as
(select cast(MPXML as xml) MPXML from ManagementPack where MPName = 'Microsoft.SystemCenter.Notifications.Internal')
....

Posted via ActualForum NNTP Server 1.4

11 сен 09, 15:06    [7648177]     Ответить | Цитировать Сообщить модератору
 Re: помогите новичку сконвертировать запрос в один select  [new]
PaulD_
Member

Откуда:
Сообщений: 20
daw, Спасибо, друг!

а то что для вас делов-то, у меня пока, к сожалению, занимает много времени.
11 сен 09, 15:21    [7648300]     Ответить | Цитировать Сообщить модератору
 Re: помогите новичку сконвертировать запрос в один select  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
PaulD_
Паганель, у вас тоже есть declare, а я хочу без них совсем
Это тестовые данные
11 сен 09, 16:22    [7648787]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить