Sql 使用存储过程检查值是否具有属性

Sql 使用存储过程检查值是否具有属性,sql,sql-server,xml,stored-procedures,Sql,Sql Server,Xml,Stored Procedures,有人能告诉我如何在设置参数和获取数据之前检查值是否具有属性吗 这是我的XML: <Setup> <Include Type="Product"> <Value uomid="8078">468908_3:9500;2:10000;</Value> <Value>468906_3:9500;2:10000;</Value> </Include> </Setup> 这是我获取

有人能告诉我如何在设置参数和获取数据之前检查值是否具有属性吗

这是我的XML:

<Setup>
  <Include Type="Product">
    <Value uomid="8078">468908_3:9500;2:10000;</Value>
    <Value>468906_3:9500;2:10000;</Value>
  </Include>  
</Setup>
这是我获取数据的存储过程

    SELECT * 
    FROM (
            SELECT  YS_PromotionID,
                    PromotionName,
                    PromotionDescription,
                    PromotionSetup,
                    IsActive,
                    FromDate,
                    ToDate,
                    ShowWhenUsed,
                    SortOrder,
                    dbo.YS_GetLoyaltyProgramNameInPromotion('+CAST(@accountID AS VARCHAR)+',PromotionSetup) as LoaiThanhVien,
                    (PromotionSetup.query(''
                                for $PS in Setup/Include[@Type = ''''Product'''']/Value[@uomid='''''+CAST(@uomID as nvarchar)+'''''][text()]                                        
                                   where contains($PS, ''''' + CAST(@productID AS NVARCHAR) + '_'''') or $PS = ''''' + CAST(@productID AS NVARCHAR) + '''''
                                   return data($PS)      
                        '')).value(''(.)'', ''nvarchar(max)'') as InfoProductPromotion
            FROM    YS_Promotion
            WHERE   YS_AccountID = ' + CAST(@accountID AS NVARCHAR) + ' AND
                    (''' + CAST(@checkAll AS NVARCHAR) + ''' = 1 OR CONVERT(DATE, GETDATE()) >= CONVERT(DATE, FromDate) ) AND
                    (''' + CAST(@checkAll AS NVARCHAR) + ''' = 1 OR CONVERT(DATE, GETDATE()) <= CONVERT(DATE, ToDate) ) AND
                    (''' + CAST(@checkAll AS NVARCHAR) + ''' = 1 OR IsActive = 1) AND                       
                    (''' + CAST(@branchID AS NVARCHAR) + ''' = 0 OR ((PromotionSetup.exist(''Setup/Include[@Type = ''''Branch'''']/Value[text() = ''''' + CAST(@branchID AS NVARCHAR) + ''''']'') = 1 or PromotionSetup.exist(''Setup/Include[@Type = ''''Branch'''']/Value[text() = ''''0'''']'') = 1))) AND
                    ('''+CAST(@applyForAllCustomer AS varchar) +''' = ''1'' or dbo.YS_fcCheckPromotionApplyForCustomerLoyalty(YS_PromotionID) = 0)
        ) AS Temp WHERE InfoProductPromotion <> ''''
        --) AS Temp WHERE InfoProductPromotion <> '''' or (''' + CAST(@checkAll AS NVARCHAR) + ''' <> 1 AND PromotionSetup.exist(''Setup/Include[@Type = ''''ALLProduct'''']/Value[text() = ''''1'''']'') = 1 )
             order by ' + @sortExpression   
根据我的XML文件,我有两个值,一个是属性uomid,另一个不是

我的问题是:

首先,我想设置@productID并获取值。在选择参数为@uomid的值属性之前,我想检查值是否具有属性,然后在PromotionSetup.query中设置2个参数以获取数据


有人能帮我编辑存储过程以完成它吗?

-您应该始终为您使用的任何varchar变量和参数提供长度。我正在寻找解决问题的方法。我最好学会尽可能缩小问题的范围。试着把所有不必要的东西从你的问题中去掉。我的问题解决了