Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
3.5k views
in Technique[技术] by (71.8m points)

sql server - 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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
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



与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...