4

次のようなテーブルがあります。

orderID  Code  SubCode

コードとサブコードに基づいて、すべての orderID をプルできる必要があります。

CodesSubCodesは varchar 値であり、それに対して「いいね」をすることができる必要があります。ユーザーは、たとえば、上記の例の場合に 3%Codeと 45% にアクセスできるSubCode ため、すべての注文を取得します。はCode3 でSubCode始まり、 は 45 で始まります。

私はそれを次のように動作させましたCode

ALTER PROCEDURE [sp_GetOrders]
    -- Add the parameters for the stored procedure here
@codeList varchar(max), 
@subCodeList varchar(max)
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;


declare @tempTable Table
(
SearchCode varchar(max)
)
insert  into @tempTable
select  * from dbo.udf_split(@codeList ) as split --this splits comma delimited list 'm passing in 

    -- Insert statements for procedure here
SELECT  orderID  from ordert t1
where
exists(
select 1 from @tempTable tt
where t1.userCode  like tt.SearchOrg
)
END

上記は機能し、codeList に 300% を渡すと、300 で始まるコードを持つすべての注文 ID が正しく返されますが、SubCode をミックスに含めるにはどうすればよいですか?

コードとサブ組織を 1 つのパラメーターとして渡すことができれば、相互の関係を失わないようにすることができた方がよいと思います。おそらく、'5%-6%' のようなダッシュが付いたもので、5% がコードで 6 % the suborg.. しかし、どこから始めればよいかわかりません。

バックエンドからは、どの形式でパラメーターを渡すかは問題ではありません。SP を機能させる方法を理解する必要があるだけです。

4

2 に答える 2

1

入力パラメータのタイプを次のように変更することを検討してください。XML

XML 形式

DECLARE @inputXML AS XML = 
 '<ParameterList>
    <Parameter>
        <Code>300%</Code>
        <SubCode>5%</SubCode>
    </Parameter>
    <Parameter>
        <Code>10%</Code>
        <SubCode>6%</SubCode>
    </Parameter>
</ParameterList>'

あなたのストアドプロシージャは次のようになります

ALTER PROCEDURE [sp_GetOrders]
    @inputXML XML 
AS
BEGIN

SET NOCOUNT ON;

DECLARE @tempTable TABLE
(
SearchCode VARCHAR(100),
SearchSubCode VARCHAR(100)
)


INSERT  INTO @tempTable
SELECT
   Pars.value('(Code)[1]', 'Varchar(100)') AS Code,
   Pars.value('(SubCode)[1]', 'Varchar(100)') AS SubCode
FROM
   @inputXML.nodes('/ParameterList/Parameter') AS List(Pars)


SELECT  orderID  
FROM ordert t1
WHERE
EXISTS(
    SELECT 1 FROM @tempTable tt
    WHERE t1.userCode  LIKE tt.SearchCode
    AND t1.userSubCode LIKE tt.SearchSubCode
)
于 2013-04-10T20:32:43.260 に答える