我有一张表格如下:
orderID Code SubCode
基于代码和子代码,我需要能够提取所有orderID。
Codes
和SubCodes
是varchar值,我需要能够在其上执行“喜欢”,因为用户可以访问{{1}的3% }和Code
的45%
对于上面的示例,我将获得SubCode
以3开头且Code
以45开头的所有订单。
我已经让它像SubCode
一样工作:
Code
以上的工作,如果我为codeList传递了300%,它会正确返回所有具有以300开头的代码的订单ID,但我现在如何在混合中包含SubCode? p >
我想如果我能够将代码和suborg作为1个参数传递,以便不会失去彼此之间的关系,可能更好,可能是像'5%-6%'这样的破折号,其中5%将是代码和6%的suborg ..但我不知道从哪里开始。
从后端开始,传递参数的格式无关紧要,我只需要弄清楚如何让SP工作。
答案 0 :(得分: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
)
答案 1 :(得分:1)
在SQLServer2008 +中,您可以将表值参数传递给SP和UDF。表值参数允许您以表格格式将数据行传递给SP和UDF。要创建表值参数,必须首先创建一个定义表结构的表类型。
CREATE TYPE dbo.CodeSubCodeValueType
AS TABLE (Code nvarchar(100) NOT NULL, SubCode nvarchar(100) NOT NULL)
GO
ALTER PROCEDURE [sp_GetOrders]
(@CodeSubCodeValueType dbo.CodeSubCodeValueType READONLY)
AS
BEGIN
SET NOCOUNT ON;
SELECT orderID
FROM ordert t1
WHERE EXISTS(
SELECT 1
FROM @CodeSubCodeValueType tt
WHERE t1.userCode LIKE tt.Code
AND t1.userSubCode LIKE tt.SubCode
)
END
GO
使用表值参数调用过程
DECLARE @CodeSubCodeValueType dbo.CodeSubCodeValueType
INSERT @CodeSubCodeValueType
VALUES('5%', '6%'),
('7%', '8%')
EXEC [sp_GetOrders] @CodeSubCodeValueType
如果参数couple之一为空,则在表类型中使用NULL值是必要的:
CREATE TYPE dbo.CodeSubCodeValueType
AS TABLE (Code nvarchar(100), SubCode nvarchar(100))
GO
ALTER PROCEDURE [sp_GetOrders]
(@CodeSubCodeValueType dbo.CodeSubCodeValueType READONLY)
AS
BEGIN
SET NOCOUNT ON;
SELECT orderID
FROM ordert t1
WHERE EXISTS(
SELECT 1
FROM @CodeSubCodeValueType tt
WHERE t1.Code LIKE ISNULL(tt.Code, t1.Code)
AND t1.SubCode LIKE ISNULL(tt.SubCode, t1.SubCode)
)
END
GO
上的简单演示