Search code examples
sql-serverxquery

Combining two xQuery queries into one


INSERT INTO @TempData
SELECT [ID], '209'
FROM [ProductData].[dbo].[XMLtb] as tb
Where NOT EXISTS (
    SELECT 1
                FROM [ProductData].[dbo].[Properties] p
                WHERE tb.ID = p.ID
    ) 
AND Lang = 'EN' and [XMLcol].exist('/Inventory/Equip[@Cat="Product" and text()[ contains(., "7th gen")] or text()[ contains(., "8th gen")]]') =1


INSERT INTO @TempData
SELECT [ID], '208'
FROM [ProductData].[dbo].[XMLtb] as tb
Where NOT EXISTS (
    SELECT 1
                FROM [ProductData].[dbo].[Properties] p
                WHERE tb.ID = p.ID
    )
AND Lang = 'EN' and [XMLcol].exist('/Inventory/Equip[@Cat="Product" and text()[ contains(., "Device Manager")]]') =1

I have these two queries, but they are inefficient because I am parsing through the XML table twice. This is in no way a good stored procedure, so I was wondering if there was a way to combine the two into one. I was thinking of using cross apply, but it wouldn't really work since I don't have boolean columns, so I can't think of a good way to do this.


Solution

  • INSERT INTO @TempData
    SELECT [ID], CASE WHEN
        [XMLcol].exist('/Inventory/Equip[@Cat="Product" and text()[ contains(., "Device Manager")]]') = 1
        THEN 208 ELSE 209 END
    FROM [ProductData].[dbo].[XMLtb] as tb
    Where NOT EXISTS (
        SELECT 1
                    FROM [ProductData].[dbo].[Properties] p
                    WHERE tb.ID = p.ID
        ) 
    AND Lang = 'EN'
    and [XMLcol].exist(
        '/Inventory/Equip[@Cat="Product" and text()[ contains(., "7th gen") or contains(., "8th gen") or contains(., "Device Manager")]]'
    ) = 1