我正在尝试创建一个存储过程,它将接受where值条件的多值参数,如下所示
ALTER PROC spGetExpectedSalesOrActiveSales @Divisions NVARCHAR(200), @var1 int
AS
BEGIN
SELECT *
FROM ABC
WHERE x = '0' and z=@var1
AND y IN (@Divisions)
END
exec spGetExpectedSalesOrActiveSales 'EE, MM' ,1
如果我使用'ABC'或'ABC,XYZ'代替@Divisions,那么它的工作正常 当我通过API为@Divisions传递单个值然后执行它但是当传递多个值如'ABC,XYX'时,它只是显示没有记录。 我通过API传递的值,它是一个字符串数组。 我没有从查询中获取@Divisions值,而是从API中获取。
答案 0 :(得分:1)
SQL Server不支持数组。但是,如果你真的必须,有多个ways to fake arrays。
答案 1 :(得分:0)
您正试图像这样获取查询
prop
显然你不能像上面那样选择。
在这种情况下,您可以采用两种方式。一个是动态编码,另一个是用户定义功能。
<强>动态:强>
SELECT *
FROM ABC
WHERE x = '0'
AND y IN ('ABC,XYZ')
答案 2 :(得分:0)
有Table Valued Parameters
https://www.mssqltips.com/sqlservertip/2112/table-value-parameters-in-sql-server-2008-and-net-c/
它允许将元素数组传递给存储过程。
DataTable _dt;
// create data table to insert items
_dt = new DataTable("Items");
_dt.Columns.Add("ItemID", typeof(string));
_dt.Columns.Add("Name", typeof(string));
_dt.Rows.Add(4, "SuperBowl 9 Hat");
_dt.Rows.Add(5, "SuperBowl 10 T-Shirt");
_dt.Rows.Add(6, "SuperBowl 13 Towel");
_dt.Rows.Add(7, "SuperBowl 14 Helmet");
然后在存储过程中你有这样的东西
CREATE PROCEDURE [dbo].[InsertItemsTVP] @ItemTVP TVP_Items READONLY
AS
BEGIN
INSERT INTO dbo.Items (ItemID, Name)
SELECT ItemID, Name
FROM @ItemTVP
END
GO
阅读有关性能的信息,因为有时使用逗号分隔字符串比使用TVP快得多