C# 如何使用存储过程在参数中传递多个值
这是我的存储过程。有人说使用TVP我可以得到我想要的输出。但我对sql还是新手。因此,请有人帮助我,如何传递多个disposeid和多个receiveid,如下所示。现在我只需要使用能够理解什么是tvp的输出,所以有人请编辑我的SP以传递其中的多个值C# 如何使用存储过程在参数中传递多个值,c#,sql,C#,Sql,这是我的存储过程。有人说使用TVP我可以得到我想要的输出。但我对sql还是新手。因此,请有人帮助我,如何传递多个disposeid和多个receiveid,如下所示。现在我只需要使用能够理解什么是tvp的输出,所以有人请编辑我的SP以传递其中的多个值 USE [Test] GO /****** Object: StoredProcedure [dbo].[up_Get_Customers] Script Date: 09/23/2015 19:10:23 ******
USE [Test]
GO
/****** Object: StoredProcedure [dbo].[up_Get_Customers] Script Date: 09/23/2015 19:10:23 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROC [dbo].[up_Get_Customers]
(
@DisposeId int
)
AS
BEGIN
SELECT C1.DisposeDate,C1.DisposeID,C1.ReceiveDate,C1.ReceiveID
FROM Customers C1
LEFT JOIN Customers C2 ON C1.DisposeID=C1.ReceiveID
WHERE @DisposeId IS NULL OR (C1.DisposeID in (@DisposeId,','))
END
GO
嗯,这是我今天学到的新东西,通过少量的谷歌搜索,我想出了这个 TVP为T可V值p参数 因此,根据链接中的信息:
CREATE TYPE DisposeIdsTable AS TABLE (
DisposeId VARCHAR(50));
GO
然后
USE [Test]
GO
/****** Object: StoredProcedure [dbo].[up_Get_Customers] Script Date: 09/23/2015 19:10:23 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROC [dbo].[up_Get_Customers]
(
@DisposeIds DisposeIdsTable READONLY
)
AS
BEGIN
SELECT C1.DisposeDate,C1.DisposeID,C1.ReceiveDate,C1.ReceiveID
FROM Customers C1
LEFT JOIN Customers C2 ON C1.DisposeID=C1.ReceiveID
WHERE (SELECT COUNT(*) FROM @DisposeIds) = 0
OR
(C1.DisposeID IN (
SELECT DisposeID FROM @DisposeIds
UNION ALL
SELECT ',')))
END
GO
N.B.上面发布的代码根本没有经过测试,因此可能包含错误。此外,我还假设了DisposeId
的数据类型,因此这不太可能是正确的,需要修改以适合您的数据类型。此外,我还试图保留查询的现有逻辑,不管是什么
执行存储过程时,需要声明类型为
dispeidstable
的变量,而不是当前使用的文本数据类型。然后,需要用您的ID填充该表变量。如何创建多个disposeid和多个receiveid是什么意思?下次尝试google解决方案。试试这个谢谢@ClayDisposeIds
设置为READONLY