2013-04-12 4 views
0

Мне нужен оператор select, который будет анализировать xml и возвращать идентификаторы на основе условия. как я могу использовать цикл в этом случае?Выберите запрос для возврата идентификаторов на основе значений

У меня есть fruitIds, прошедшие в xml. Каждый из фруктов проверяется в фруктовом соке, если он существует, также если он является свежим-0 или нет-1. Если он продан (2), то его не следует принимать во внимание. SP должен возвращать различные идентификаторы плодов, которые имеют IsFresh значение 0 или 1

CREATE PROCEDURE [dbo].[Fruits]  
@Data XML 
AS 

BEGIN TRY 

SET @Data = '<Fruits> 
<Fruit FruitID="1"></Fruit> 
    <Fruit FruitID="2"></Fruit> 
</Fruits>' 

SELECT DISTINCT(FruitType)  
from dbo.FruitsTable 
where FruitID = (SELECT Fruit.cols.value('@FruitID', 'INT') FruitID 
      FROM @Data.nodes('/Fruits/Fruit') Fruit(cols)) 
AND (Fruit.IsFresh = 0 OR Fruit.IsFresh = 1)      
END TRY 
BEGIN CATCH 
END CATCH 
GO 
FruitsTable 

     Composite Key = fruitid,buyerid 
     FruitID IsFresh BuyerID(this if FK) 
     1   0  1 
     2   1  2 
     3   0  2 
     4   0  3 
     5   2  1 
     1   1  2 

ответ

1

Senthil, Вы очень близки, то есть ваша логика звук, только ваш синтаксис выключен. Вам нужно использовать IN вместо «=» (IN проверяет, соответствует ли значение в наборе) и исправить наложение на таблицу:

SELECT DISTINCT f.FruitId 
from dbo.FruitsTable f 
where f.FruitID in (
      SELECT Fruit.cols.value('@FruitID', 'INT') FruitID 
      FROM @Data.nodes('/Fruits/Fruit') Fruit(cols)) 
     AND (f.IsFresh in (0,1))