0

我需要一个 select 语句来解析 xml 并根据条件返回 Id。在这种情况下如何使用循环?

我在 xml 中传递了fruitIds。如果每个fruitids 存在,则在fruitids 中检查它是fresh-0 还是not-1。如果售罄-(2) 则不应考虑在内。SP 必须返回 IsFresh 设置为 0 或 1 的水果的不同 ID

 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
4

1 回答 1

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))
于 2013-04-12T14:09:52.633 回答