2015-09-15 1 views
2

У меня есть оператор Sql, который возвращает xml продуктов, в которых корневой элемент является продуктом. Как добавить атрибут count в корневой элемент.Добавить count в корневые элементы, используя FOR XML PATH

My SQL является:

SELECT 
id AS 'product_id', 
name AS 'product_name' 
FROM product 
WHERE status = 1 AND ...... 
ORDER BY productid 
FOR XML PATH('product'), ROOT('products') 

Результат

<products> 
    <product> 
    . 
    . 
    </product> 
</products> 

Я хочу изменить результат

<products count="100"> 
    <product> 
    . 
    . 
    </product> 
</products> 
+0

нужно просто добавить кол = 100, или вы хотите, чтобы принять фактическое количество из XML-он должен появиться в счете =? – wiretext

+0

Я хочу принять фактическое количество продуктов – Can

ответ

4
SELECT 
COUNT(*) AS '@count', 
(
    SELECT * 
    FROM product c1 FOR XML PATH('product'), TYPE 
) 
FROM product ct FOR XML PATH('products') 

Самый простой способ фильтрации является добавление условия в как запрос, так и подзапрос:

SELECT 
COUNT(*) AS '@count', 
(
    SELECT * 
    FROM product c1 
    WHERE c1.status = 1 AND ...... 
    FOR XML PATH('product'), TYPE 
) 
FROM product ct 
WHERE ct.status = 1 AND ...... 
FOR XML PATH('products') 

Или используйте временный стол:

SELECT * 
INTO #Temp 
FROM product c1 
WHERE c1.status = 1 AND ...... 


SELECT 
COUNT(*) AS '@count', 
(
    SELECT * 
    FROM #Temp c1 
    FOR XML PATH('product'), TYPE 
) 
FROM #Temp ct 
FOR XML PATH('products') 
+0

Фактически я не хочу всех продуктов, у меня есть некоторые условия, поэтому я отредактировал вопрос. – Can

+0

@doganhisa проверить обновленную версию – Backs

+0

спасибо, так что мне нужно добавить условия как для запроса, так и для подзапроса. Невозможно ли достичь этих условий записи только один раз. Потому что запрос, который я дал, является примером, мой фактический запрос очень длинный. – Can